問題タブ [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.
scope - 動的スコープの利点は何ですか?
私は、静的スコープが物事を行うための唯一の正しい方法であり、動的スコープが悪魔のツールであり、インタープリター/コンパイラーの不十分な実装からのみ生じることを学びました。
次に、 Common Lisp vs.Schemeの記事からこのスニペットを見ました:
Common Lispが「この点で勝つ」のはなぜですか?動的スコープで行うのが簡単なことは何ですか?私は本当にそれを必要とする/それを良いものとして見ることを正当化することはできません。
language-agnostic - 動的スコープ - ディープ バインディングとシャロー バインディング
私は浅いバインディングと深いバインディングについて頭を悩ませようとしてきましたが、ウィキペディアはそれを適切に説明していません。次のコードがあるとします。言語が動的スコープを使用している場合、出力はどうなりますか
a) ディープ バインディング
b) 浅いバインディング?
python - Pythonで動的スコープ変数を作成するにはどうすればよいですか?
私はいくつかのコードをlispからPythonに翻訳しています。
lispでは、導入された変数を特別なものとして宣言し、動的スコープを持つletコンストラクトを持つことができます。(http://en.wikipedia.org/wiki/Dynamic_scope#Dynamic_scopingを参照してください)
Pythonで同様に行うにはどうすればよいですか?言語はこれを直接サポートしていないようですが、本当の場合、それをエミュレートするための良い方法は何でしょうか?
lisp - Tcl で Lisp コンス セルをエミュレートする
Lisp のリストは一連のコンス セルですが、Tcl のリストは要素を空白で区切った文字列です。コードを Lisp から Tcl に変換するには、単純に Lisp リストを Tcl リストに変換します。ただし、これは副作用のあるコンス セルが Tcl コードに到達しないという問題に遭遇します。たとえば、次のコードを Lisp で考えてみましょう。
Tcl で Lisp リストのより良いエミュレーションを提供する Tcl パッケージはありますか? そのようなパッケージは、通常の Tcl リストへの簡単な変換を提供しますか?
上記のコードは、そのようなパッケージを使用した Tcl ではどのように見えるでしょうか?
lisp - クロージャーと動的スコープ?
動的スコープを使用する言語でクロージャーを許可することに危険がある理由を理解していると思います。つまり、問題なく変数を閉じられるように見えますが、読み込もうとすると、グローバル スタックの一番上にある値しか取得できません。他の関数がその間に同じ名前を使用すると、これは危険な場合があります。
他の微妙な点を見逃していませんか?
dynamic-scope - 変数の動的スコープの採用
独自のプログラミング言語を設計していると想像してください。非常に特定の目的のための非常に単純な言語。関数、ループ、変数があります。また、変数の動的スコープを利用したいと考えています。
架空の例を考えてみましょう:
私の質問は - ループ内に設定された「カウント」変数値を外部に表示する方法は? ユーザーにとってより自然な (または混乱を避ける) ようにするには、どうすればよいでしょうか?
- 現在のスコープで新しい変数を定義するためのキーワードに加えて、外側のスコープから既存の変数に値を割り当てるための特別なキーワードを導入しますか? setとvar、またはassingとdefなどとしましょう。しかし、「外側のスコープ」とは何を意味するのでしょうか? 「count」がループの直前に定義されておらず、代わりに呼び出しスタックのどこかで定義されている場合はどうなりますか? 「set count = ...」は、親フレームの親の親から変数に値を割り当てますか?
次のような記述ができるように、ループ文に戻り値 (またはタプル) を導入しますか?
変数カウント = 0 変数カウント = ループ (条件 == 真) は [i] { 変数 i = i + 1 } を返します。
それは厄介に見えませんか?
- あなたの解決策は?
知る限り、Perl はlocalキーワードを使用した動的スコープをサポートしています。動的スコープ変数のみを使用して、Perl でこのような例をどのように実装しますか?
ありがとうございました!
ruby-on-rails - Rails で動的スコープ ヘルパーを作成する
私のパーシャルのいくつかは、2 つの「モード」でレンダリングできます。の場合、いくつかのフィールドfull_display
をfalse
レンダリングしません。物事を簡単にするために、「モード」の 1 つをデフォルトにしたいと思いました。full_display
が定義されていない場合は、 として扱いますfalse
。私はこのコードを思いつきました:
かなり動き回ります。ヘルパーなどに入れればいいのですが、Rubyはレキシカルスコープしかないのでいい方法が思い浮かびません。
私がすでに試した悪いアイデア:
- 部分的な do
<% display = long code that is above %>
と use の上にコードを表示しますが、ビューでローカル変数を作成すると見栄えが悪く、すべての部分的な using にコピーする必要がありますfull_display
。 - 文字列内にラップし、ヘルパーに入れ、ビューで eval(display_helper) を使用しますが、明らかにこれによりセキュリティ上の懸念が生じます。
scala - scala:動的スコープの内部クラスメソッドは何ですか?
ここ( https://wiki.scala-lang.org/display/SYGN/Dynamic-scope )で説明されている動的スコープの3つのメソッドすべてを評価しようとしていますが、「内部クラスのメソッド」以外はすべて理解しています。それは次のように説明されています:
ネストされたクラス定義を使用して、動的スコープと同様の効果を実現できます。状態を消費するコード全体を状態オブジェクトの内部クラスとして定義し、新しいグローバル状態が必要になるたびにそのオブジェクトをインスタンス化することにより、含まれるすべてのコードが親参照を介して状態変数に直接アクセスします。
プログラム全体を単一のファイルで定義することを避けるために、このアプローチでは、ほとんどの目的で、プログラムを単一のクラスに構成するためにコンポーネントミックスインを使用する必要があります。
私はこれを完全には理解していません-誰かがこれを示すいくつかのサンプルコードを与えることは可能ですか?暗黙的なパラメーターの2番目のアプローチは私には理にかなっていますが、この記事では、内部クラスのメソッドと組み合わせることができることも示唆されており、それもよくわかりません。ありがとう!
emacs - emacs lisp クロージャーのローカル変数の欠如を克服する方法
私は今、Emacs Lisp をリファレンス マニュアルから、Common Lisp をLISP Book から勉強しています。
Common Lispの本から
この関数は、ダイナミック バインディング動作のため、Emacs Lisp では機能しません。
グローバル変数を導入せずに Emacs Lisp で同じ関数を実装することは可能でしょうか?
jsp - JSP でリクエスト スコープの変数を設定するのが適切なのはいつですか?
scope="request"
私の経験では、EL 変数を設定する必要はほとんどありません。
たとえば、item
パラメーターを指定すると、そのアイテムのプロパティに基づいてそのアイテムに固有の URL を構築するページがあります。このページは、アイテムへのリンクをレンダリングする必要があるすべてのページに含まれています。
(A) リクエストスコープの変数を使用
itemLink.jsp
otherPage.jsp
(B) リクエストスコープ変数なし
itemLink.jsp
otherPage.jsp
(B)よりも(A)を使用する理由はありますか? 私の答えはノーです。理由は次のとおりです。
( A)の場合、同じリクエスト中に処理される他のページには が表示されることを覚えておく必要が
itemUrl
あるため、名前の衝突を避ける必要があります。また、同じリクエスト中に処理されるすべてのページを検索する以外に、リクエスト スコープの変数が設定されている場所を見つける方法がないため、EL 変数のソースのトレースがより困難になります。(B)では、変数にはページ スコープしかないため、これは問題になりません。
編集:
おそらく(B)よりも優れた解決策があります。
(C) 静的インクルードの使用
itemLink.jspf
otherPage.jsp
(B)も(C)も、リクエストスコープの変数を使用する必要はありません。見逃したリクエストスコープを使用する理由はありますか?