ローカル変数のテーブルを実行時に取得する方法の比較 [言語比較]
Python
locals 関数を使う。
>>> def f(x):
... y=1
... print locals()
...
>>> f(0)
{'y': 1, 'x': 0}
>>>
Tcl
info locals コマンドを使う。
% proc f {x} {
set y 1
foreach i [info locals] {
puts "$i: [set $i]"
}
}
% f 0
x: 0
y: 1
Lua
debug.getlocal 関数を使う。
> function f(x)
>> local y = 1
>> a = 1 -- これはグローバル変数とした
>> while true do
>> local name, value = debug.getlocal(1, a)
>> if not name then break end
>> print(name, value)
>> a = a + 1
>> end
>> end
> f(0)
x 0
y 1
Perl
できない。 my 変数は実行時のシンボルテーブルに入らない。
ハッシュ %::
または %main::
でグローバル変数のシンボルテーブルにはアクセスできる。
JavaScript
できない?
関数の仮引数にアクセスする方法はあった(変数名は取得できない)。
js> function f(x) {
var y = 1;
print(arguments[0]); /* 最初の仮引数を表示 */
}
js> f(0);
0
js> f(13);
13
js>
Ruby
?
Lisp
(variables)
で取得できるのはグローバルのみ?(Perlと同じ?)
(というか (variables)
という関数は Common Lisp の標準ではないのかな?)
コメント 0