Как проверить, какие последствия неоднозначны? - PullRequest
0 голосов
/ 20 февраля 2019

У меня определены следующие неявные преобразования, которые помогают мне переносить некоторый код 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

обязательно:Boolean

 if (this.someValue) {

Я подозреваю, что это из-за какого-то другого неявного импортированного преобразования, которое делает преобразование неоднозначным, но я не могу его найти.Есть ли какой-либо метод или инструмент, который показал бы мне приемлемые конверсии или иным образом помог бы мне определить двусмысленность?Я пробовал IntelliJ Shift-Ctrl-Q, но он показывает мне только мое преобразование в Boolean и некоторые преобразования в String, что выглядит хорошо.

1 Ответ

0 голосов
/ 20 февраля 2019

Неявные преобразования не могут быть неоднозначными.Компилятор будет жаловаться, если в сопоставлении области есть несколько преобразований.

Можете ли вы подтвердить, что преобразование toBoolean действительно находится в области при вызове this.someValue?

...