如何摆脱这种“警告:表达式未使用”的警告?

cas*_*ret 4 object compiler-warnings kotlin

试图弄清楚为什么我在此代码中得到警告。

object Test {
  val bar = true

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

fun main(args: Array<String>) {
  println(Test {bar})
}
Run Code Online (Sandbox Code Playgroud)

编译时得到这个

test.kt:5:12:警告:表达式未使用
返回foo()

但它肯定似乎已被使用,因为您true在运行它时确实会得到它。

Wil*_*zel 6

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

第一种方式:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    return this.foo()
}
Run Code Online (Sandbox Code Playgroud)

第二种方式:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    return foo(this)
}
Run Code Online (Sandbox Code Playgroud)

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


如果只想警告消失,则可以@Suppress在语句级别使用注释:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    @Suppress("UNUSED_EXPRESSION")
    return foo()
}
Run Code Online (Sandbox Code Playgroud)

您可以对整个文件,整个类或整个函数执行此操作,但是最好直接在语句中使用它,因为其他未使用的表达式确实可能是您(而非故意)和编译器的错误那不会告诉你的