我是scala的新手,今天我看到了一个我无法理解的函数定义:
def f(x: Int): Int = x
val func = (x: Int, y: Int, z: Int) => f(x)
那么在Scala中,定义func
的语法是什么?对我来说,func
只是一个函数接受三个参数:func: (Int, Int, Int) => Int = <function3>
。为什么不将func
定义为
def func(x: Int, y: Int, z: Int): Int = f(x)
这是出于效率的原因吗?因为我们只需要评估一次val。
答案 0 :(得分:-1)
func
被定义为一个包含该签名的函数的值,并使用这样的函数进行初始化。在将来的某个时间,在类方法中,您可以提供不同的功能。它将被调用为func(1,2,3)
并根据在该时间点实际分配给func
的函数返回结果。
这提供了替代子类中的方法的替代方法。例如,您可能有一个状态机实现,需要以不同的方式响应输入,具体取决于状态;这是通过改变接收函数的值来适当响应的可行方法。