【发布时间】:2019-02-20 10:12:26
【问题描述】:
我定义了以下隐式转换,这有助于我将一些 Javascript 代码移植到 Scala:
case class NullableBoolean(value: Boolean)
implicit def toNullable(boolean: Boolean) = NullableBoolean(boolean)
implicit def toBoolean(boolean: NullableBoolean) = boolean != null && boolean.value
然后像这样使用代码:
class SomeClass {
var x: NullableBoolean = _
def set(v: Boolean): Unit = {
x = v
}
def someOtherFunction(): Unit = {
if (x) println("Yes")
else print("No")
}
}
val some = new SomeClass
some.someOtherFunction()
some.set(true)
some.someOtherFunction()
在小样本中使用时一切正常。但是在实际项目中使用时,出现错误:
错误:(360, 16) 类型不匹配;
找到:xxx.NullableBoolean
必填:布尔值
if (this.someValue) {
我怀疑这是因为导入了其他一些隐式转换,这使得转换模棱两可,但我找不到它。是否有一些方法或工具可以向我显示符合条件的转换或以其他方式帮助我确定歧义?我试过 IntelliJ Shift-Ctrl-Q,但它只显示了我对布尔值的转换和对字符串的一些转换,看起来不错。
【问题讨论】: