[英]How can an implicit be unimported from the Scala repl?
是否可以從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,然后開始一個新的,我很想避免重復它。
您可以通過創建另一個具有相同名稱的隱式來隱藏隱式。 幸運的是(對於這種情況,無論如何),而不是重載隱式,新的替換舊的:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.