我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