我this class在斯卡拉:爲什麼Scala類型推斷在這裏失敗?
object Util {
class Tapper[A](tapMe: A) {
def tap(f: A => Unit): A = {
f(tapMe)
tapMe
}
def tap(fs: (A => Unit)*): A = {
fs.foreach(_(tapMe))
tapMe
}
}
implicit def tapper[A](toTap: A): Tapper[A] = new Tapper(toTap)
}
現在,
"aaa".tap(_.trim)
不能編譯,給人錯誤
error: missing parameter type for expanded function ((x$1) => x$1.trim)
爲什麼沒有類型推斷爲String
?從錯誤看來,隱式轉換確實會觸發(否則錯誤將沿着「tap
不是類String
的成員」)。看起來轉換必須是Tapper[String]
,這意味着參數的類型是String => Unit
(或(String => Unit)*
)。
有趣的是,如果我註釋掉或者tap
的定義,那麼它會進行編譯。
好主意,謝謝!我想我必須以不同的方式命名它們。 – 2010-07-23 08:54:03
你很快成爲新的丹尼爾,傑森! – 2010-07-23 14:25:38
@oxbow更好的是,他經常引用規範,這是一件好事。 – 2010-07-23 15:50:18