Sun*_*nny 2 expression scala function
A型:
val even1 = (x:Int) => { println("in even1"); x % 2 == 0}
Run Code Online (Sandbox Code Playgroud)
REPL上的输出:
even1: Int => Boolean = <function1>
Run Code Online (Sandbox Code Playgroud)
B型:
val even2 : Int => Boolean = { println("in even2");_% 2 == 0}
Run Code Online (Sandbox Code Playgroud)
REPL上的输出:
in even2
even2: Int => Boolean = <function1>
Run Code Online (Sandbox Code Playgroud)
我知道函数的'def'和'val'声明之间的区别,上面的条件对我来说有点不同.请帮我理解这个区别......
even1并且even2确实不相同.要理解原因,这里有一个不同但等效的定义方法even2:
val even2 : Int => Boolean = { println("in even2"); x => x % 2 == 0 }
Run Code Online (Sandbox Code Playgroud)
现在......定义的右侧(RHS)even1是一个函数,它接受Int并返回一个包含print语句的块,后跟一个布尔表达式.
相反,在even2这种情况下,函数和块是"由内而外":右侧是包含print语句和类型函数的块Int => Boolean.
在Scala中,块是一个表达式,该表达式的结果()是该块包含的最后一个表达式(如果有的话; 否则)的结果.因此,println在声明中even1,每次执行时间even1被调用,而println在声明even2中只有一次,在执行时even2被定义.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |