Perlについての質問箱 25箱目
■ このスレッドは過去ログ倉庫に格納されています
0232デフォルトの名無しさん
2006/06/12(月) 01:46:11その本も変だし。
>クロージャの作られたスコープで動作する
この表現も微妙。
あえてドコで実行されるかを言えば、クロージャのリファレンスのアクセス先。
>>229は、クロージャの理解としては正解。
どこで実行されるとかよりも、クロージャがある限りmy変数が消えないで残ってるんだよ、ってところが重要なのであり、べつに「ドコで」とかはもうどうでもいい気が。答えようがないし。
---------------------
{
my $hoge;
}
#通常、この場所では$hogeは内部的にも消滅してる
#Perlは参照が不可能になった変数は破棄する。
---------------------
{
my $hoge;
our $closure = sub {$hoge = $hoge + 1}
}
#この場合、クローバル変数closureを通して$hogeが参照されるので、$hogeは消滅しないし、
#$closureをデリファレンスすると$hogeにアクセスされる。
#レキシカルスコープ(my)は静的なスコープで、コンパイル時に見たまんまのスコープが適用される。
#で、$hogeはこの時みたまんまのレキシカルスコープを持ってるんであって、ドコで実行とかは関係ない。
#だからxxのスコープで実行されるとかの表現も少し変。
#xxはyyのスコープにある、とかyyのスコープを持っているとか表現しる。
#ドコのスコープで実行されるとかは、動的なダイナミックスコープの話で、クロージャとダイナミックスコープは関係ない。
---------------------
■ このスレッドは過去ログ倉庫に格納されています