我定义了以下隐式转换,这有助于我将一些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,但是它只显示了我到Boolean的转换以及一些到String的转换,这看起来还不错。
答案 0 :(得分:0)
隐式转换不能是模棱两可的。如果范围匹配中有多个转换,则编译器会抱怨。
调用this.someValue
时是否可以确认toBoolean转换确实在范围内?