下方对象sum
与函数f(i: Int, j:Int) = i + j
据我所知,函数是特征,每次我们声明一个函数时,都会创建一个具有相应定义的apply方法的特征的对象。但我无法理解下面的对象定义可以用于什么特殊目的。
如果我在任何地方都错了,请纠正我。
object sum extends Function2[Int, Int, Int]{
def apply(first: Int, second: Int) = {
first + second
}
}
答案 0 :(得分:1)
这是一个价值; f
不是,它只能转换为值,如果在多个地方使用它,它将被多次转换,这可能会对性能产生(可能非常小)影响。但是,与val sum = (i: Int, j: Int) => i + j
相比,我认为没有任何优势(或者如果它需要处于最高级别,object A { val sum = (i: Int, j: Int) => i + j }
)。
答案 1 :(得分:1)
函数文字中有一些功能方法没有:
因此,通过显式定义.then
方法而不是使用函数literal syntactic sugar,您可以访问所有这些。
此外,您还可以添加其他方法和/或字段。
但是,您的示例不使用这些,所以实际上,使用显式语法没有意义。
实际上,有一个区别:
apply
val sum = (first: Int, second: Int) => first + second
是sum
,而在您的示例中,它是val
。
另请注意,您发布的代码:
object
不是一个函数,它是一个方法!我的答案适用于函数文字和显式定义的def f(i: Int, j:Int) = i + j
实例/子类型,不与方法之间的区别。