2011-01-25 31 views
4

PHPとPythonのようないくつかの言語はどうすればdynamic name resolutionを使用しますか?動的な名前解決

私が今までそれを使用するのでは思っているだけの時間が明示的にformatにパラメータに持つから私を救うために、このPythonコードのような何かを行うことです。

"{a} {b} {c} {d}".format(**locals()) 
が、それは本当に多くを取ることはありません。ただ明確にする(とビット以下エラーが発生しやすい)する作業:

"{a} {b} {c} {d}".format(a=a, b=b, c=c, d=d) 

そして、誰が今までの代わりにマップのそれを使用する理由と同じ範囲で地元の人々を取得/設定するために、私は表示されません。

動的な名前解決がなければ、入力ミスが発生し、プログラムを破損することなく自動的に変数の名前を変更できます。動的な名前解決では、行を入力する手間を省くことができます。何か不足していますか?

Pythonのドキュメントによれば、今後は削除される可能性があります。もっと歴史的なものなのでしょうか?動的な名前解決の実際のユースケースは何ですか?

答えて

1

ほとんどの動的型指定言語には、選択肢がありません。 x.yのような式では、yを静的に検索することはできません。使用可能なフィールドは実行時にのみ利用可能なxのタイプによって異なります。

タイプ推論やJITなどの方法がありますが、基底言語には動的名検索があるため、にはほとんどの機能が含まれています(Luaテーブルの力など参照)。

+0

あなたの例は、名前解決よりもダイナミックな入力と思われますか? –

+0

あなたは、動的に決定されているオブジェクトの属性セットについて話しています。私がここで話している「動的名前解決」は、静的に決定されていないローカル/グローバルスコープです。例えばf(){return x + 1} 'は、xがどこでもスコープ内にないことは明らかですが、実行時に失敗します(fはトップレベルの関数であり、オブジェクトの一部ではないと仮定します)。私はオブジェクトの場合、言語が 'this' /' self'などを使わずに暗黙的に属性を参照できるようにして、オブジェクトのメソッドが実行時に変わる可能性があるとしたら、動的スコープ解決が必要です。 –

+0

Longpoke:申し訳ありませんが、今だけこれを見ました。その場合、その言語がレキシカルスコープであることを前提とした正当な理由はありません。唯一の理由は、初期の実装では(特に意図しない動的スコープ機能があった場合)、そのようなものだと考えることができ、いくつかのコーナーケースを壊す恐れがあるため、修正するのが怠惰でした。 – Aardappel

関連する問題