gpt4 book ai didi

scala - 为什么scala不能推断偏应用中省略参数的类型?

转载 作者:行者123 更新时间:2023-12-04 15:46:25 24 4
gpt4 key购买 nike

考虑一下:

scala> def sum(x:Int,y:Int) = x+y
sum: (x: Int, y: Int)Int

scala> sum(1,_:String)
<console>:9: error: type mismatch;
found : String
required: Int
sum(1,_:String)

显然 Scala 非常清楚 _ 的确切类型在 sum(1,_)但你必须 say sum(1,_:Int) .为什么 ?

显然 Scala 随机(?)选择一个:
scala> def sum(x:Int,y:String) = 1
sum: (x: Int, y: String)Int

scala> def sum(x:Int,y:Double) = 1
sum: (x: Int, y: Double)Int

scala> class Ashkan
defined class Ashkan

scala> sum(1,_:Ashkan)
<console>:10: error: type mismatch;
found : Ashkan
required: Double
sum(1,_:Ashkan)

最佳答案

由此看来issue ,听起来他们可以做到,但对于一般情况,相对于它提供的好处来说太复杂了。通常它会很复杂的原因是方法重载的可能性。如果您还拥有:

def sum (x : Int , y : Double ) = x + y

在范围内,如果没有类型规范,你的意思是哪个函数是不明确的。在没有重载的情况下,类型推断可以很容易地弄清楚,但我觉得他们认为为特定情况提供服务是不值得的。

简而言之,这听起来像是实际的,而不是理论上的限制。

我相信错误消息是通过简单地获取具有适当名称和数量的第一个函数来生成的,在非重载函数的情况下,它给人的印象是它已经完全推理出类型。

关于scala - 为什么scala不能推断偏应用中省略参数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844754/

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