我定义了以下隐式转换,这有助于我将一些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)类型不匹配;
找到:.nullableboolean
必需:布尔值
if (this.someValue) {
我怀疑这是因为导入了其他隐式转换,使得转换不明确,但我找不到它。是否有某种方法或工具可以向我展示合格的转换或帮助我确定歧义?我尝试过intellij shift-ctrl-q,但它只显示了我对布尔值的转换,以及对字符串的一些转换,看起来不错。
1条答案
按热度按时间qjp7pelc1#
隐式转换不能含糊不清。如果在范围匹配中有多个转换,编译器会抱怨。
调用时能否确认toboolean转换确实在范围内
this.someValue
?