我如何摆脱这个 'warning: the expression is unused' 警告?

How do I get rid of this 'warning: the expression is unused' warning?

正在尝试找出我在此代码中收到警告的原因。

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: warning: the expression is unused
return foo()

但它似乎确实被使用了,因为当你 运行 它时你确实会得到 true

this 上显式调用 foo() 将使警告消失:

第一种方式:

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

第二种方式:

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

由于在这种情况下您应该可以省略 this,我猜这是编译器中的一个错误。


如果只是想让warning消失,可以在语句级别使用@Suppress注解:

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

你可以对整个文件、整个 class 或整个函数都这样做,但最好直接在语句中使用它,因为其他未使用的表达式可能真的是你的错误(而不是故意的)然后编译器不会告诉你。

您确定的这个误报是 Kotlin 中的一个已知问题 KT-21282, so you can either apply one of 或者等待 JetBrains 修复该错误。