スカラの既存のクラスに新しいメソッドを定義する方法が出てきます。既存のクラスにメソッドを挿入する
例えば、私は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)?
うわー!これは素晴らしいです。このアイデアはどうやって思いついたのですか?また、asInstanceOf [T]は単なる例です。私は、一般的なケースで動作するシンタックスキャンディーがあるのは不思議です。 –
一般的なルールとして、コードに型エラーがありますが、コンパイラがそれを受け入れると、暗黙の変換が行われています...それがぶら下がっていたという事実が大きな手がかりでした:) –