1.基本概念:
{}块,包含了一系列的表达式,其结果也是表达式(块中最后的表达式值,就是块的值)
2.关键点:
~ 块:包含了一系列的表达式
~ 块:块是有返回值的(块中最后的表达式的值,就是块的值)
3.内容:
# 变量:作用域的问题
· 在block的变量只能在{}内可见
· 在block的变量会隐藏在{}外的同名变量 => 假设你在block和block外面都定义相同名称的变量,那么块中的变量会隐藏{}外的变量
# 类型:返回值的问题
在scala中,赋值动作本身是没有值的,是Unit类型,表示为:(),类似于java中的void :
例:
{ r = r*n ; n-=1 } 返回的是一个Unit
对比:
scala: val aa = { val bb:Int = 1 } res1: Unit = () 返回的是一个Unit
例: { var x:Int =0 ; var y:Int = 1 ; x = y = 2} error: 变量x 需要的是一个Int类型的值,而 y=2 返回的是一个Unit类型
在java中赋值语句的那个值是被赋的那个值,x = y = 1 是有意义的
补充:
· 在scala中val定义的变量为常量,必须在初始的时候进行赋值,赋值之后是不能在改变值
· 在scala编程尽量少定义变量 => 函数式编程
关键点:
· 在定义函数的时候,块中的表达式一定要注意返回值的写法
· 在scala中赋值语句的那个值是一个Unit的类型,而在java中赋值语句的那个值是被赋的那个值
# 隐藏:
对某个val的初始化需要分多步完成的情况:
例:val distance={val dx=x-x0;val dy=y-y0;sqrt(dx*dx+dy*dy)}{}块的值取其最后一个表达式 ,量dx和dy仅作为计算所需要的中间值。