scala重载方法值无法应用

时间:2016-08-01 12:42:05

标签: scala

以下代码有效:

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)

1 个答案:

答案 0 :(得分:4)

我认为这与隐式转换有关。在第一种情况下,当您只有一个导致单位的定义时,即使您得到布尔或数组等结果,也会触发隐式转换为单位,并始终返回预期的单位。

重载时,不再应用此隐式转换,而是应用重载解析机制。您可以在Scala Language Specification

中更详细地了解其工作原理