問題タブ [dynamic-scope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
emacs - Emacs 24 での変数スコープの新しい規則は何ですか?
Emacs 24 には、字句スコープの変数が含まれるようになりました。もちろん、動的スコープの変数もまだあります。両方があるので、変数がいつどのようなスコープを持つかについて、私はかなり混乱しています。レキシカルバインディングがいつ有効になるかを制御する変数があり、動的スコープの変数を宣言するlexical-binding
ことについて何か読んだと思いますが、一般的にはかなり迷っています。defvar
Emacs 24 の新しいスコープ規則のどこかに適切な説明がありますか? 別の言い方をすれば、Emacs 24 用に書かれた Emacs Lisp コードの変数を見たとき、その変数が使用しているスコープをどのように確認すればよいでしょうか?
javascript - evalに頼らずにJavaScriptで動的スコープを実現することは可能ですか?
JavaScript にはレキシカル スコープがあります。つまり、関数内からアクセスされる非ローカル変数は、関数が定義されたときにその関数の親のスコープに存在する変数に解決されます。これは、関数内からアクセスされる非ローカル変数が、呼び出されたときにその関数の呼び出しスコープに存在する変数に解決される動的スコープとは対照的です。
上記のプログラムは、レキシカル スコープ言語で 1 と 2 を出力し、ダイナミック スコープ言語で 3 と 1 を出力します。JavaScript はレキシカル スコープであるため、以下に示すように 1 を出力し、次に 2 を出力します。
eval
JavaScript は動的スコープをサポートしていませんが、次のように実装できます。
に頼らずに同じ結果を達成する別の方法があるかどうかを知りたいですeval
。
編集:これは、使用せずに実装しようとしているものですeval
:
あまり良い例ではないことは承知していますが、一般的な考え方は、動的スコープを使用してクロージャーを作成することです。このパターンの可能性は大きいと思います。
javascript - JavaScriptでポインタをシミュレートするためのより良い方法はありますか?
次のように、動的スコープを使用してJavaScriptでポインターをシミュレートしています。
同じ結果を達成する他の方法はありますか(つまり、に頼ることなくeval
)?ボイラープレートが多すぎるようです。
clojure - clojureと^:dynamic
動的変数とバインディング関数を理解しようとしたので、これを試しました(clojure 1.3):
混乱して、私はこのやや単純なコードを試しました:
2つのコードの違いは何ですか?2番目の例は機能するのに、最初の例は機能しないのはなぜですか?
ヒント:次の作業に気づきました(理由はまだ完全には理解されていません)。
scheme - SICPの環境評価モデルの観点からの字句的スコープと動的スコープ
SICPのセクション3.2.2で、次のコードの実行
この図で説明されています。
関数が適用されるたびに、シンボルと値の間のバインディングのセットを表す新しいフレームが作成されます( E1
throughでラベル付けされます)。E4
シンボルがフレームにバインドされていない場合、そのフレームを囲む環境は、その特定のシンボルのバインドについて照会されます。
この図の興味深い点は、でラベル付けされたすべてのフレームE
がグローバル環境に含まれていることです。これは、関数がグローバル環境で定義されているためであると説明されていますが、この問題については詳しく説明されていません。
によって作成された各フレームは、プロシージャオブジェクト
square
によって示される環境であるため、グローバル環境を指していることに注意してください。square
代わりに、関数が呼び出された環境に含まれているフレーム、たとえば、に含まれているフレームが含まれている場合、E3
それE2
はE1
動的スコープの言語がどのように機能するかの有効なモデルでしょうか?また、Schemeは字句スコープであるため、ダイアグラム内のフレームが同じ「親」環境を持つ方法はありますか?
clojure - Clojureダイナミックバインディング
以下は多くの理由で悪い考えだと思います。また、スタックオーバーフローの担当者が23人であることを考えると、私がプログラミングを学んでいる初心者であると想定するのが自然なことです。しかし、私をユーモアを交えて、「なぜこれをやりたいのか/やりたくないのか」という側面ではなく、「どうすればこれができるのか」に焦点を当ててください。
私が欲しいもの:
出力する:
したがって、基本的に、 with-animalをマクロにしたいのですが、「speak」関数呼び出しのすべての発生は、ブロックを呼び出しているオブジェクトにマップされます。
特に、私は書きたくありません:
むしろ、with-animalに、speak関数を呼び出しているオブジェクトのメソッドにマップさせたいと思います。
Clojureでこれを行うためのクリーンな方法はありますか?
ありがとう!
clojure - clojureの動的変数とバインディングの実際的な目的は何ですか?
参照を確認しました:http ://clojure.org/vars#Vars%20and%20the%20Global%20Environment、http : //clojuredocs.org/clojure_core/clojure.core/binding
clojureと^:dynamicおよびClojureDynamicBindingと同様に
binding
私が書いたすべてのプログラムにはそれらがなく、従来の方法で例を書く方法を見つけることができるので、なぜ必要なのかまだわかりません-私はより理解しやすいと思います。これを利用したプロジェクト/プログラミングパラダイムの例はありますか?
たとえば...動物を話す例では、次のようにして同様の効果を得ることができます。
マクロも動的バインディングもありません...それでも非常にクリーンです。
c - 動的スコープを使用した名前による呼び出し
静的/動的スコープに関する次の問題で立ち往生しています。
次のプログラムフラグメントは、グローバル変数を許可し、関数のネストされた宣言を許可しないプログラミング言語で記述されています。
Q1。プログラミング言語が静的スコープを使用し、必要に応じてパラメーターを渡すメカニズムを呼び出す場合、上記のプログラムによって出力される値は次のとおりです。
(A)115、220(B)25、220(C)25、15(D)115、105
Q2。プログラミング言語が動的スコープと名前による呼び出しパラメーター受け渡しメカニズムを使用する場合、上記のプログラムによって出力される値は次のとおりです。
(A)115、220(B)25、220(C)25、15(D)115、105
私の考え:
Q1:静的スコープであり、必要に応じて呼び出しられるため、xをi+jに置き換える必要があります。ただし、名前iの変数が既に存在するため、ローカル名の競合が発生します。したがって、それ(グローバルi)の名前が変更される可能性があります。たとえば、i1とすると、呼び出しは次のようになります。
Q2:動的スコープでは、最初にローカル関数で変数を検索し、次にローカル関数を呼び出した関数を検索し、次にその関数を呼び出した関数を検索し、以下同様に呼び出しスタックを検索します。
名前による呼び出しによると:
そして2番目の呼び出しは
この答えは正しいですか?(オプションにはありません)何か足りないものはありますか?(動的バインディングは可能性がありますか?)
javascript - Eval は本当に動的スコープを JavaScript に導入しますか?
Eval によって JavaScript に動的スコープがもたらされると人々は言いますが、そのステートメントがどのように有効であるかはわかりません。Eval を使用すると、呼び出し環境と同じレキシカル環境/変数環境を使用して式が評価されます ( ECMA 262 v. 5を参照)。式の代入または宣言は明らかに動的ですが、動的スコープを導入すると言うのは妥当ではないと思います。
Eval は動的スコープを導入しないと言っているのは正しいですか?