ich mit diesem Stück Code den folgenden Fehler habe, die mir keinen Sinn macht:Können Sie nicht in einem Runnable SAM in Kotlin zurückkehren?
fun spawnWorker(): Runnable {
return Runnable {
LOG.info("I am a potato!")
return
}
}
mir meine IDE sagt dies:
Aber die Schnittstelle Runnable sagt etwas anderes :
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
Was ist der Grund, warum ich keine Rückkehr gibt, aber ohne Rückkehr haben es kompiliert fein:
fun spawnWorker(): Runnable {
return Runnable {
LOG.info("I am a potato!")
}
}
Dank! Ich war mir nicht bewusst, dass der Kotlin-Compiler nicht den Umfang überprüfen konnte, in dem ich diese Rückkehr verwende, es ist das erste Mal, dass ich dieses Verhalten in einer funktionalen Sprache sehe. – PedroD
Es ist nicht so, dass der Compiler den Gültigkeitsbereich nicht überprüfen konnte, sondern tatsächlich den Gültigkeitsbereich überprüft und die nicht lokale Rückkehr aus diesem Gültigkeitsbereich verbietet. Die return-Anweisung wurde absichtlich so entworfen, dass sie von der nächsten Nicht-Lambda-Funktion zurückkehrte, um Inline-Funktionen mit lambdas zu aktivieren, wie 'forEach',' synchronized' usw., die wie Sprachkonstrukte aussehen. Weitere Details zu Rücksendeanweisungen finden Sie hier: https://kotlinlang.org/docs/reference/returns.html#return-at-labels – Ilya