用户替换Java的等价语法
导入通配符
1 | // Java |
*
在Scala中是合法的方法名,所以导入包时要使用_
代替。
类成员默认值
1 | class Foo{ |
自动设置类成员变脸的默认值。
注:该语法只适合于类成员,不适用于局部变量。
可变参数
Java声明可变参数如下:
1 | public static void printArgs(String ... args){ |
调用方法如下:
1 | //传入两个参数 |
在Java中可以直接将数组传给printArgs
方法,但在Scala中需要明确的指定是想将集合作为一个独立参数传进去,还是想将集合的元素传进去。如果是后者,则要借助下划线:
1 | printArgs(List("a", "b"): _*) |
类型通配符
Java的泛型系统有一个通配符类型,例如List<?>,任意的List
1 | public static void printList(List<?> list){ |
对应的Scala版本为:
1 | def printList(list: List[_]): Unit ={ |
模式匹配
默认匹配
1 | str match{ |
匹配集合元素
1 | //匹配以0开头,长度为三的列表 |
Scala特有语法
访问Tuple元素
1 | val t = (1, 2, 3) |
简写函数字面量(function literal)
如果函数的参数在函数体内只出现一次,则可以使用下划线代替:
1 | val f1 = (_: Int) + (_: Int) |
定义一元操作符
在Scala中,操作符其实就是方法,例如1 + 1
等价于1.+(1)
,利用下划线我们可以定义自己的左置操作符,例如Scala中的负数就是用左置操作符实现的:
1 | -2 |
定义赋值操作符
通过下划线实现赋值操作符,从而可以精确地控制赋值过程:
1 | class Foo { |
定义部分应用函数(partially applied function)
可以为某个函数只提供部分参数进行调用,返回的结果是一个新的函数,即部分应用函数。因为只提供了部分参数,所以部分应用函数也因此而得名。
1 | def sum(a: Int, b: Int, c: Int) = a + b + c |
将方法转换成函数
Scala中方法和函数是两个不同的概念,方法无法作为参数进行传递,也无法赋值给变量,但是函数是可以的。在Scala中,利用下划线可以将方法转换成函数:
1 | //将println方法转换成函数,并赋值给p |
注:
- 方法和函数的不同:
- 方法是一个以
def
开头的带有参数列表的一个逻辑操作块,比如object或者class的成员方法 - 函数是一个赋值给一个变量(或者常量)的匿名方法,并且通过
=>
转换符号跟上逻辑代码块的一个表达式
- 方法是一个以