Scala学习笔记

1.在Scala中,变量或函数的类型总是写在变量或函数的名称的后面。

2.Scala并不区分基本类型和引用类型

3.定义常量用val,定义变量用var

通过val声明的只会生成getter,而var会生成setter,getter

4.java中的++ i和i ++在Scala里不起作用

5.参数化:在创建实例的同时就完成对它的“设置”

6.a*b:左操作数是方法的调用者,可以写成a.*(b)

但1:: twoThree,:: 方法的调用者是twoThree,1是方法的传入参数,可以写成twoThree.::(1)

(以 ‘:‘ 结尾的方法由它的右操作数调用,并传入左操作数,以其他字符结尾的反之.)

7.方法体前面没有等号,但带有花括号,那么方法的结果类型必定是Unit,

如果方法最后返回的是String,但结果类型被声明为Unit,那么String将被转变为Unit并丢弃原值。所以为了避免出现错误,方法最好带上等号

8.类和单例对象间的差别是。单例对象不带参数,而类可以,因为单例对象不是用new关键字实例化的,所以没机会传递给它实例化参数,单例对象在第一次访问的时候才会被初始化

9.任何方法都可以是操作符,到底是操作符还是方法取决于你如何使用它,如果写成s.indexOf(‘o‘),indexOf就不是操作符,但是如果写成s indexOf ‘o‘,那么indexOf就是操作符,因为你以操作符标注方式使用它。

10父类中成员声明为var的字体,则子类用val重写是错误的,因为var提供了setter/getter方法,而val只提供getter方法

11.Scala里的每个辅助构造器的第一个动作都是调用同类的别的构造器

12.本地函数可以访问包含其函数有参数。

13.让函数字面量更简短的方式:去类型参数和省略括号,下划线当作一个或多个占位符

14.在scala中,访问字段比调用方法略快,因为字段值在类初始化时候被预算,而方法调用在每次调用的时候都要计算,但是使用字段需要额外的内存空间。

15.可以在调用不带参数的方法时省略空的括号

16.Scala里的字段和方法属于相同的命名空间,所以可以使用字段来重写无参数方法,所以,Scala禁止在同一个类里用同样的名称定义字段和方法

不同于Java(4个命名空间),Scala只有两个命名空间,值(字段,方法,包还有单例对象),类型(类和特质名)

17.content mkstring "\n":将content数组格式化为字符串,其中每个数组元素占据一行

18.Any是所有其他类的超类,Nothing是所有其他类的子类

19.声明函数时使用return语句,必须声明返回的类型如:def a() : Int = {return }

20.若类中声明无参方法时没有带括号,那么在调用时也不能带括号

21.如果指针右侧只出现一次参数就可使用_

如:    def f(x => x * 3)

等价于 def  f(_ * 3)

22.泛型的类型匹配要注意List[String],Map[char,Int]不能被匹配,因为匹配是发生在编译进,List的泛型会被擦除掉,导致只要是List的就能匹配成功,但Array[Int]能匹配成功

时间: 2024-12-07 10:54:50

Scala学习笔记的相关文章

Scala学习笔记及与Java不同之处总结-从Java开发者角度

Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.以下列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码演示样例及具体阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接. 语句能够不用";"结束.且推荐不适用";". 变量声明时以var或va

原创:Scala学习笔记(不断更新)

Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/while,递归,其中用goto实现循环已经在现代语言中被放弃,而for/while形式的结构化编程成为主流,而递归作为另一种方案,则长期只流行在函数式编程的小圈子中. 递归被主流编程界所担心的主要是过深的调用栈,甚至以前的课堂上我们还亲自尝试过将递归改写为循环,但是现代函数式编程语言中,通过尾递归(

Scala学习笔记及与Java不同之处总结-从Java开发人员角度

Scala与Java具有许多相似之处,但又有许多不同.这里主要从一个Java开发人员的角度,总结在使用Scala的过程中所面临的一些思维转变.这里只是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.下面列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码示例及详细阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接: 语句可以不用";"结束,且推荐不适用";": 变量声明时以var或val开头

Scala学习笔记一之基础语法,条件控制,循环控制,函数,数组,集合

前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: 1:声明val变量:可以使用val来声明变量,用来存放表达式的计算结果,但是常量声明后是无法改变它的值的,建议使用val来声明常量: 声明var变量:如果要声明可以改变的引用,可以使用var变量,声明的常量的值可以改变. 3:指定类型:无论声明val变量还是声明var变量.都可以手动指定其类型,如果不指定,scala会自动根据值,进行类型

Scala学习笔记-环境搭建以及简单语法

关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first import scala.collection.mutable.ListBuffer object A { def main(args: Array[String]) { print("Hello,Scala");//学习程序设计的第一句 println("---");//pr

scala 学习笔记(04) OOP(上)

一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person { var name: String = _ /** * 从构造器 * @param name */ def this(name: String) = { this //注意:从构造器,必须先调用主构造器 this.name = name; } override def toString = { "

Scala并发编程实战初体验及其在Spark源码中的应用解析之Scala学习笔记-56

package com.leegh.actor import scala.actors.Actor /** * @author Guohui Li */object First_Actor extends Actor { def act() { for (i <- 1 to 10) { println("Step : " + i) println(Thread.currentThread().getName) Thread.sleep(2000) } }} object Seco

Scala中复合类型实战详解之Scala学习笔记-44

package com.leegh.parameterization import com.leegh.parameterization.Compound_Type /** * @author Guohui Li */ trait Compound_Type1;trait Compound_Type2;class Compound_Type extends Compound_Type1 with Compound_Type2object Compound_Type { def compound_

Scala学习笔记-11

package com.leegh.oop import scala.io.Source /** * @author Guohui Li */object FunctionOps { def main(args: Array[String]) { val width = args(0).toInt for (arg <- args.drop(1)) processData(arg, width) var increase = (x: Int) => x + 1 increase(10) inc

Scala 学习笔记(2)之类和对象

Scala 的类大抵和 Java 是类似的,简单的例子如下: class MyClass { var myField : Int = 0; def this(value : Int) = { this(); this.myField = value; } def getMyField() : Int = { return this.myField; } def addToMyField(value : Int) { this.myField += value; } } 如果好奇,可以把编译后的代