gpt4 book ai didi

scala - 为什么当参数超过 1 个时,扩展函数需要参数类型?

转载 作者:行者123 更新时间:2023-12-05 00:45:48 25 4
gpt4 key购买 nike

我有一个功能:

def adder(a: Int, b: Int) = a+b

当我尝试获取 curry 函数时:
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?

是否有任何我可以深入研究的讨论或文档?

最佳答案

这是 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 .

关于scala - 为什么当参数超过 1 个时,扩展函数需要参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55638115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com