给出了表达相同功能的三种方式f(a) := a + 1:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
Run Code Online (Sandbox Code Playgroud)
这些定义有何不同?REPL没有表明任何明显的差异:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
Run Code Online (Sandbox Code Playgroud)
Jac*_*ack 122
在一个类中,val在初始化时def进行评估,而只在每次调用该函数时进行求值.在下面的代码中,您将看到x是在第一次使用对象时计算的,但在访问x成员时不会再次计算.相反,在实例化对象时不评估y,而是在每次访问成员时评估y.
class A(a: Int) {
val x = { println("x is set to something"); a }
def y = { println("y is set to something"); a }
}
// Prints: x is set to something
val a = new A(1)
// Prints: "1"
println(a.x)
// Prints: "1"
println(a.x)
// Prints: "y is set to something" and "1"
println(a.y)
// Prints: "y is set to something" and "1"
println(a.y)
Run Code Online (Sandbox Code Playgroud)
mis*_*tor 112
f1 是一个取整数并返回整数的函数.
f2是一个零arity的方法,它返回一个取整数并返回一个整数的函数.(f2稍后在REPL处键入时,它将成为对方法的调用f2.)
f3和...一样f2.你只是不在那里使用类型推断.
| 归档时间: |
|
| 查看次数: |
19143 次 |
| 最近记录: |