相关疑难解决方法(0)

将方法注入现有类

我想找到一种方法来在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

3
推荐指数
1
解决办法
1998
查看次数

标签 统计

scala ×1