我想找到一种方法来在scala中的某个现有类中定义一个新方法.
例如,我认为该asInstanceOf[T]方法名称太长,我想用它替换它as[T].
直接的方法可以是:
class WrappedAny(val a: Any) {
def as[T] = a.asInstanceOf[T]
}
implicit def wrappingAny(a: Any): WrappedAny = new WrappedAny(a)
Run Code Online (Sandbox Code Playgroud)
有更少代码的更自然的方式吗?
此外,当我尝试这个时,会发生一件奇怪的事:
scala> class A
defined class A
scala> implicit def toA(x: Any): A = x
toA: (x: Any)A
scala> toA(1)
Run Code Online (Sandbox Code Playgroud)
控制台挂了.似乎不toA(Any)应该通过类型检查阶段,并且当它不是隐含时它不能.将所有代码放入外部源代码可能会产生同样的问题.这怎么发生的?这是编译器的错误(版本2.8.0)?
scala ×1