gpt4 book ai didi

scala - 使用隐式类重写方法

转载 作者:行者123 更新时间:2023-12-04 05:51:11 25 4
gpt4 key购买 nike

我的意图是更改==String方法的行为以调用equalsIgnoreCase

这段代码

implicit class LowerCase(s: String) {
override def ==(that: LowerCase) = that.equalsIgnoreCase(this)
}

导致此错误
error: type mismatch;
found : MyClass.LowerCase
required: String
override def ==(that: String) = that.equalsIgnoreCase(this)

最佳答案

如果类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

关于scala - 使用隐式类重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20699105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com