Tratando de averiguar por qué recibo una advertencia en este código.
object Test { val bar = true operator fun invoke(foo: Test.() -> Boolean): Boolean { return foo() } } fun main(args: Array<String>) { println(Test {bar}) }Obtienes esto cuando compilas
test.kt:5:12: advertencia: la expresión no se usa
devolver foo()
Pero ciertamente parece ser usado, ya que se vuelve true cuando lo ejecuta.
Llamar a foo() explícitamente en this hará que la advertencia desaparezca:
1ra manera:
operator fun invoke(foo: Test.() -> Boolean): Boolean { return this.foo() }2da manera:
operator fun invoke(foo: Test.() -> Boolean): Boolean { return foo(this) } Dado que debería poder omitir this en este contexto, supongo que es un error en el compilador.
Si solo desea que desaparezca la advertencia, puede usar la anotación @Suppress en el nivel de declaración:
operator fun invoke(foo: Test.() -> Boolean): Boolean { @Suppress("UNUSED_EXPRESSION") return foo() }Podría hacerlo para todo el archivo, toda la clase o toda la función también, pero es mejor usarlo directamente en la instrucción porque otras expresiones no utilizadas podrían ser realmente un error suyo (y no intencionado) y del compilador. Entonces no te lo contaría.
Este falso positivo que identificó es un problema conocido en Kotlin KT-21282 , por lo que puede aplicar una de las soluciones de Willi o esperar a que JetBrains solucione el error.