我有这样的功能:
def ifSome[B, _](pairs:(Option[B], B => _)*) {
for((paramOption, setFunc) <- pairs)
for(someParam <- paramOption) setFunc(someParam)
}
和像这样的重载函数:
class Foo{
var b=""
def setB(b:String){this.b = b}
def setB(b:Int){this.b = b.toString}
}
val f = new Foo
那么下面的行会产生一个错误:
ifSome(Option("hi") -> f.setB _)
<console>:11: error: ambiguous reference to overloaded definition,
both method setB in class Foo of type (b: Int)Unit
and method setB in class Foo of type (b: String)Unit
match expected type ?
ifSome(Option("hi") -> f.setB _)
但是编译器知道我们正在寻找一个 Function1[java.lang.String, _],那么为什么 Function1[Int, _] 的存在会造成任何混乱呢?我是否遗漏了什么或者这是一个编译器错误(或者它应该是一个功能请求)?
我能够通过使用像这样的类型注释来解决这个问题
ifSome(Option("hi") -> (f.setB _:String=>Unit))
但我想了解为什么这是必要的。