我有一个功能:
def adder(a: Int, b: Int) = a+b
,当我尝试获取curried函数时:
val addOne = adder(1, _) //error: missing parameter type for expanded function
val addOne = adder(1, _:Int) //Works
我认为这可能是由于具有相同名称的不同参数类型的区别。但随后它仅对具有一个参数的函数起作用:
def square(a: Int) = a*a
val squareFunc = square(_)
没有错误。为什么仅对参数编号的限制> 1?
如果推理是由于参数类型的不同,我们仍应允许使用lambda变量。例如,应该允许这样做,因为一个变量只能保存一个具有特定参数类型的lambda:
val adder: (Int,Int)=>Int = _+_
val addOne = adder(1,_) //Still error, but should be allowed?
我可以深入探讨任何讨论或文档吗?
答案 0 :(得分:3)
这是Scala编译器中的旧限制。实际上,这是最近才修复的,并已移植回Scala 2.12.8!
Welcome to Scala 2.12.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_152).
Type in expressions for evaluation. Or try :help.
scala> def adder(a: Int, b: Int) = a + b
adder: (a: Int, b: Int)Int
scala> val addOne = adder(1, _)
addOne: Int => Int = $$Lambda$3978/16149813@813a8ff