作者: 機械伯爵
日時: 2005/11/15(11:06)
TSruby:181発言より、聞かれてもいないのにPython版(笑)

>>  今日は「変数の中身を変数名にできるか?」という質問です。
>>  Perl では

>> $abc = 'def';
>> $def = 'abc';

>> print ${$abc};

>> 結果: 'abc'

>>  という書き方が可能なのですが、Ruby ではこういう書き方はできないでしょ
>> うか? 

 参考までにPythonだとvarsという組み込み関数を、引数なしで実行すると、
現在の実行環境の名前空間を辞書で取得できます。

>>> d = vars()
>>> abcd = "efgh"
>>> efgh = "abcd"
>>> print d[abcd]
abcd
>>> print d[efgh]
efgh
>>> print vars()[abcd]
abcd
>>>

※『def』はPythonの予約語なので、ちょっと変更

 ちなみに、varsで得られた辞書に新しいキーとアイテムを
書き込んだり、キーのアイテムを変更したりすれば、新しい
変数が忽然と現れたり、変数の中身が変更されたりします。

 私はこういう裏技(ハック?)が好きなんですが、まとも
に考えれば、言語仕様としては無くても良い、あるいは無い
方が良いのかもしれませんね(というか、なんでPythonなんか
にこんな裏技が存在するかのほうが不思議)

 /機械伯爵/