9

replから暗黙のインポートを解除することは可能ですか?

私がこのようなことをすると言う、

scala> import scala.math.BigInt._
import scala.math.BigInt._

scala> :implicits
/* 2 implicit members imported from scala.math.BigInt */
  /* 2 defined in scala.math.BigInt */
  implicit def int2bigInt(i: Int): scala.math.BigInt
  implicit def long2bigInt(l: Long): scala.math.BigInt

そして、それはすべて大きな間違いだったと判断します。これらの暗黙を現在のスコープから削除するにはどうすればよいですか?

私の現在のテクニックはREPLを中止してから新しいものを開始することであり、それを繰り返さないようにしたいと思っています。

4

1 に答える 1

13

同じ名前で別の暗黙を作成することにより、暗黙を非表示にすることができます。幸いなことに(この場合はとにかく)、暗黙的にオーバーロードされるのではなく、新しいものが古いものを置き換えます。

scala> import language.implicitConversions
import language.implicitConversions

scala> def needsBoolean(b: Boolean) = !b
needsBoolean: (b: Boolean)Boolean

scala> implicit def int2bool(i: Int) = i==0
int2bool: (i: Int)Boolean

scala> val dangerous = needsBoolean(0)
dangerous: Boolean = false

scala> trait ThatWasABadIdea
defined trait ThatWasABadIdea

scala> implicit def int2bool(ack: ThatWasABadIdea) = ack
int2bool: (ack: ThatWasABadIdea)ThatWasABadIdea

scala> val safe = needsBoolean(0)
<console>:14: error: type mismatch;
 found   : Int(0)
 required: Boolean
       val safe = needsBoolean(0)
于 2013-03-23T21:51:51.193 に答える