Как мне избавиться от этого предупреждения: выражение не используется? - PullRequest
0 голосов
/ 24 января 2019

Попытка выяснить, почему я получаю предупреждение в этом коде.

object Test {
  val bar = true

  operator fun invoke(foo: Test.() -> Boolean): Boolean {
    return foo()
  }
}

fun main(args: Array<String>) {
  println(Test {bar})
}

Вы получаете это при компиляции

test.kt: 5: 12: предупреждение: выражение не используется
return foo ()

Но, безусловно, он используется, поскольку вы получаете true при запуске.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Это ложное срабатывание, которое вы обнаружили, является известной проблемой в Kotlin KT-21282 , поэтому вы можете применить одно из решений Вилли или подождать, пока JetBrains исправит ошибку.

0 голосов
/ 24 января 2019

Вызов foo() явно по this заставит предупреждение исчезнуть:

1-й путь:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    return this.foo()
}

2-й способ:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    return foo(this)
}

Поскольку в этом контексте вы должны опустить this, я думаю, что это ошибка в компиляторе.


Если вы просто хотитечтобы предупреждение исчезло, вы можете использовать аннотацию @Suppress на уровне оператора:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    @Suppress("UNUSED_EXPRESSION")
    return foo()
}

Вы можете сделать это для всего файла, всего класса или всей функции, но это лучшеиспользовать его непосредственно в операторе, потому что другие неиспользованные выражения могут действительно быть вашей ошибкой (а не преднамеренно), и компилятор не сообщит вам об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...