试图弄清楚为什么我在此代码中得到警告。
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:警告:表达式未使用
返回foo()
但是肯定可以使用它,因为运行时确实会得到true
。
答案 0 :(得分:5)
在foo()
上显式调用this
将使警告消失:
第一种方式:
operator fun invoke(foo: Test.() -> Boolean): Boolean {
return this.foo()
}
第二种方式:
operator fun invoke(foo: Test.() -> Boolean): Boolean {
return foo(this)
}
由于在这种情况下您应该可以省略this
,所以我认为这是编译器中的错误。
如果您只想警告警告消失,则可以在语句级别使用@Suppress
批注:
operator fun invoke(foo: Test.() -> Boolean): Boolean {
@Suppress("UNUSED_EXPRESSION")
return foo()
}
您也可以对整个文件,整个类或整个函数执行此操作,但是最好直接在语句中使用它,因为其他未使用的表达式确实可能是您的错误(并非出于故意)然后编译器不会告诉您。
答案 1 :(得分:2)
您发现的这种误报是Kotlin KT-21282中的一个已知问题,因此您可以应用Willi's solutions之一,也可以等待JetBrains修复该错误。