var and val
Iterate with foreach and for
简单来说,val声明的变量可以重新修改其引用,val则不行,见下面的例子:
1 def max(x: Int, y: Int): Int = { 2 if(x > y) x else y 3 } 4 5 def max(x: Int, y: Int): Int = if(x > y) x else y 6 7 var list = Array(1, 2, 3) 8 list.foreach(x => println(x)) 9 10 for(x <- list) { 11 println(x) 12 } 13 14 def test(fun: (Int, Int) => Unit): Unit = { 15 fun(5, 6) 16 } 17 18 def printlnXY(x: Int, y: Int): Unit = { 19 println(x) 20 println(y) 21 } 22 23 test(printlnXY) 24 25 test((x, y) => { 26 println(x) 27 println(y) 28 })
采用后缀类型声明法的原因是Scala支持类型推断,这样后面的类型声明在大多数情况下是可以忽略的。
Define some function基本语法
1 def max(x: Int, y: Int): Int = { 2 if(x > y) x else y 3 }
如果方法只包含一行代码,则可以这样写:
1 def max(x: Int, y: Int): Int = if(x > y) x else y
1 var list = Array(1, 2, 3) 2 list.foreach(x => println(x))
语法感觉非常亲切(类似C#)。有点委托、匿名方法和Lamda表达式的味道。
1 def test(fun: (Int, Int) => Unit): Unit = { 2 fun(5, 6) 3 } 4 5 def printlnXY(x: Int, y: Int): Unit = { 6 println(x) 7 println(y) 8 } 9 10 test(printlnXY) 11 12 test((x, y) => { 13 println(x) 14 println(y) 15 })
框架地址:http://happy.codeplex.com