【发布时间】:2010-11-18 09:22:01
【问题描述】:
我想找到一种方法来在 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)
有没有更自然、代码更少的方法?
另外,当我尝试这个时会发生一件奇怪的事情:
scala> class A
defined class A
scala> implicit def toA(x: Any): A = x
toA: (x: Any)A
scala> toA(1)
控制台挂起。似乎toA(Any) 不应该通过类型检查阶段,并且当它不是隐式时也不能。并且将所有代码放入外部源代码中也会产生同样的问题。这怎么发生的?是编译器(2.8.0版)的bug吗?
【问题讨论】:
标签: scala