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

Ash*_*ary 6 scala type-inference currying partial-application

考虑一下:

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)
Run Code Online (Sandbox Code Playgroud)

显然Scala非常了解_in 的确切类型,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)
Run Code Online (Sandbox Code Playgroud)

sla*_*ery 0

这个问题的答案 对你有启发吗?正如 @oxbow_lakes' 的回答所证明的那样,这似乎确实是不一致的。