SSブログ

ローカル変数のテーブルを実行時に取得する方法の比較 [言語比較]

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 の標準ではないのかな?)


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Ruby 雑感ブロックと関数の違い ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。