如果参数多于1个,为什么扩展功能需要使用参数类型?

时间:2019-04-11 17:24:51

标签: scala

我有一个功能:

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?

我可以深入探讨任何讨论或文档吗?

1 个答案:

答案 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

here对此进行了讨论,并修复了here