クラスScalaのコンパイラでこのような方法は、暗黙的な変換を検索しない既に存在します。あなたの実装が無効であることを
注意、それは次のようになります。
implicit class LowerCase(val s: String) {
def ==(that: LowerCase) = that.s.equalsIgnoreCase(this.s)
}
注それはまだ役に立たないということ。
あなたが手動タイプを指定する必要がありMap
のキーとして使用したい場合:
implicit class LowerCase(val s: String) {
// Use `equals`, not `==`
override def equals(that: Any) = that match {
case t: LowerCase => t.s.equalsIgnoreCase(this.s)
case _ => false
}
override def toString() = s
}
scala> Set[LowerCase]("A", "a", "b")
res0: scala.collection.immutable.Set[LowerCase] = Set(A, b)
あなたはこの"a" == "A"
ような変数で、このメソッドを使用する場合は、別のメソッド名を使用する必要があります
を
implicit class LowerCase(val s: String) extends AnyVal {
def ===(that: String) = s.equalsIgnoreCase(that)
}
scala> "a" === "A"
res0: Boolean = true
「動作しない」とはどういう意味ですか?エラーが出ますか?それはあなたが期待しているものとは異なって振る舞いますか?あなたは何を期待していましたか、それは実際に何をしていますか、それはあなたが期待したものとどのように違うのですか? – Jesper
はい、コンパイラエラーメッセージが追加されました – hanxue