2009/08/02

Parrot でのクロージャ

:outer で環境を指定した sub を .const 'Sub' でつかまえて newclosure する。

他のネームスペースの sub をつかまえるときは find_name を使う。

.sub main
$P0 = make_closure(10)
$P1 = make_closure(100)
$P0() # 11
$P1() # 101
$P0() # 12
$P1() # 102
.end

.sub make_closure
.param pmc n
.lex 'n', n
.const 'Sub' foo_sub = "foo"
$P1 = newclosure foo_sub
.return($P1)
.end

.sub foo :outer(make_closure)
$P0 = find_lex 'n'
$P0 += 1
say $P0
.end

0 件のコメント: