We know that the body of a lambda is lazily good, because if we don't call lambda, the code in the lambda body will never be called.
We also know in any function language that a variable can be used in the / lambda function, even if it is not initialized, for example, javascript, ruby, groovy and .etc, for example, the groovy code below can work fine:
def foo
def lambda = { foo }
foo = "bar"
println(lambda())
// ^--- return "bar"
We also know that we can access an uninitialized variable if the catch block initialized the variable when an exception occurs in a try block in Java, for example:
int m;
try{ throw new RuntimeException(); } catch(Exception ex){ m = 2;}
System.out.println(m);
, ? , Kotlin - , , , , . - "" . :
var a:Int
val lambda = { a }// lambda is never be invoked
// ^--- a compile error thrown: variable is not initialized yet
a = 2
Q: ? , - Java, , ObjectRef , : - ". :
var a:Int
run{ a = 2 }
println(a)
, , element ObjectRef , @hotkey .
Q: Kotlin , catch-, , java? :
var a: Int
try {
run { a = 2 }
} catch(ex: Throwable) {
a = 3
}
println(a)
, @hotkey , try-catch Kotlin , :
var a: Int = try {
run { 2 }
} catch(ex: Throwable) {
3
}
println(a);
Q: , run ? :
val a = run{2};
println(a);
java, :
int a;
try {
a = 2;
} catch (Throwable ex) {
a = 3;
}
System.out.println(a);