Is there a way how to address enclosing-closure objects in a closure body instead of eclosing function object instance? I can create a local variable, let it autobind and use later but I wonder if there is a more elegant way...
#! /usr/bin/env fan
class B
{
Void run()
{
a := A.make
{
echo("this=$this, it=$it")
ainst := it
it.test { echo("this=$this, it=$it, ainst=$ainst") }
}
}
}
class A
{
Void test(|Int|? i := null) { i?.call(100) }
}
class Main
{
static Int main()
{
B().run
return 0
}
}
In nested it-blocks it is quite common that I need the nearest "enclosing" object - despite it is only an it-block object.
brianTue 1 Jun 2010
Yeap - you have to create a named local variable to access an "outer it", since each level will hide the it from the previous scope.
katox Tue 1 Jun 2010
Is there a way how to address enclosing-closure objects in a closure body instead of eclosing function object instance? I can create a local variable, let it autobind and use later but I wonder if there is a more elegant way...
In nested
it
-blocks it is quite common that I need the nearest "enclosing" object - despite it is only anit
-block object.brian Tue 1 Jun 2010
Yeap - you have to create a named local variable to access an "outer it", since each level will hide the
it
from the previous scope.