处理或检测字符串 + 枚举,防止添加默认字符串



>我正在转换一个连接字符串和枚举值的大代码。代码使用Int作为枚举类型,我想将其转换为适当的枚举(最好是extends Enumeration,但trait+objects也可以(。我希望编译器执行从枚举到数值的转换,或者至少在我尝试将枚举值添加到字符串时给我一个编译器错误。

尽管我付出了努力,但由于烦人的默认 Scala String 运算符 +,以下代码仍然打印DEPTH=D0

import scala.language.implicitConversions
object Main extends App {
implicit class StringPlus(s: String) {
def + (v: Enumeration#Value): String = s + v.id.toString
}
implicit def str(v: Enumeration#Value): String = v.id.toString
val b = true
object D extends Enumeration {
val D0 = Value(100)
}
val d = D.D0
val s = "DEPTH=" + d
println(s)
}

有没有办法禁用默认字符串+,以便编译器处理或检测到上述情况?我目前正在使用 Scala 2.12,但如有必要,我可以移植到 2.13。

考虑 ADT 和覆盖toString,如下所示

sealed abstract class D(val value: Int) {
override def toString: String = value.toString
}
case object D0 extends D(100)
case object D1 extends D(200)
val d = D0
val s = "DEPTH=" + d

哪些输出

s: String = DEPTH=100

正如马里奥所展示的那样,覆盖toString比更改内置的字符串+要容易得多。必要时,可以使用相同的方法进行Enumeration

abstract class MyEnumeration extends Enumeration {
class MyVal(i: Int) extends Val(i, null) {
override def toString = i.toString
}
def MyValue(i: Int) = new MyVal(i)
}
object D extends MyEnumeration {
val D0 = MyValue(100)
}

相关内容

  • 没有找到相关文章

最新更新