以下代码有效:
def bbb(v: Double => Unit)(a: Double): Unit = v(a)
bbb{v: Double => v == 0 }(5)
bbb{v: Double => Array(v) }(5)
但如果我按如下方式重载bbb
,除非我为第一个bbb
调用手动分配类型签名,否则它不起作用:
def bbb(v: Double => Unit)(a: Double): Unit = v(a)
def bbb(v: Double => Array[Double])(a: Double): Array[Double] = v(a)
bbb{v: Double => v == 0 }(5) // bbb{(v => v == 0):(Double => Unit)}(5)
bbb{v: Double => Array(v) }(5)
答案 0 :(得分:4)
我认为这与隐式转换有关。在第一种情况下,当您只有一个导致单位的定义时,即使您得到布尔或数组等结果,也会触发隐式转换为单位,并始终返回预期的单位。
重载时,不再应用此隐式转换,而是应用重载解析机制。您可以在Scala Language Specification
中更详细地了解其工作原理