問題タブ [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.

0 投票する
5 に答える
754 参照

javascript - 外部関数へのローカル変数

外部関数内の関数にローカルな変数に自由変数としてアクセスしようとしています。

これは私が達成しようとしているものです:

iのスコープで変数が定義されていないため、エラーが発生しますshow_riグローバル変数の作成は機能しますが、ローカル変数にする必要がありますi

0 投票する
1 に答える
452 参照

ruby-on-rails - スコープを動的に結合するRuby on Rails

実行時にスコープを動的に組み合わせて、ユーザー入力に基づいてカスタム クエリを作成できるようにしたいと考えています。Book モデルのライブラリ アプリケーションがあり、次のスコープが定義されているとしますchecked_out, fiction, non_fiction, overdue, and checked_out_by

,はlast scopechecked_out_by引数として library_user_id を取るラムダです。このアプリケーションにより、ライブラリアンは、ユーザー入力に基づいて、これらのスコープを動的に組み合わせたさまざまな種類のクエリを実行できます。したがって、司書がチェックアウトされたすべてのノンフィクションの本を示すレポートを作成したい場合は、次のように簡単に実行できます。

しかし、ラムダとして設定されたスコープでこれを行うにはどうすればよいですか? たとえば、ユーザーが期限切れで特定の人によってチェックアウトされた本を表示するクエリを作成したい場合はどうでしょうか。この場合、criteria 配列に「overdue」スコープと「checked_out_by」スコープを含めたいのですが、ラムダ スコープでそれを設定する方法がわかりません。私は試した:

しかし、それは私に「{:checked_out_by => 6} is not a symbol」というエラーを与えます。私も試しました

および他のいくつかの亜種がありましたが、どれも機能しませんでした。誰もこれを行う方法を知っていますか?

0 投票する
4 に答える
2071 参照

lisp - Emacs Lisp:なぜこのsexpがinvalid-functionエラーを引き起こすのですか?

問題の性別は

私には、これは に評価されるように見えますが8、他の Lisp (Racket など) では評価されますが、elisp では代わりに次のエラーがスローされます。

と伝えているようです

有効な関数ではありません。これは間違っているようです。その式を評価すると、

これは私にとって有効な機能のように見えます。なぜこれが起こるのか誰にも分かりますか?動的スコープと関係がありますか?

0 投票する
2 に答える
226 参照

emacs - emacs lisp における lexical-binding と defvar の間の奇妙な相互作用

次の emacs lisp ファイルは、アリスが init ファイルで字句的にバインドされたローカル変数を使用し、ボブが init ファイルでグローバルな特殊変数としてfoo定義し、アリスがボブの init ファイルコードの一部を彼女自身の init ファイルに借用した場合に何が起こるかを確認するためのものです。それが特別になることを知っています。foodefvarfoo

出力:

結果 R1 と R2 は、期待どおりです。結果 R4 は defvar のドキュメントと一致していますが、アリスがボブのコードを読まなければ驚くかもしれません。

  1. R3は意外だった。なぜR3はこうなった?

  2. R4といえば、アリスがfoo他人に特別にされないようにするにはどうすればいいですか? たとえば、foo彼女が init ファイルまたは emacs パッケージの 1 つで使用するレキシカル ローカル変数である(defvar foo "something")可能性があり、たまたま使用するパッケージの一部である可能性があるか、またはfoo将来のバージョンで導入される新しい特殊変数名の 1 つである可能性があります。 Emacsの。Alice が Emacs に「このファイルでは、外部からのコードが同じ名前の特殊変数を使用している場合でも、foo は常に字句的であるべきです」と言うファイルに入れることができるものはありますか?

0 投票する
3 に答える
402 参照

lisp - Common Lisp のスコープに関する微妙な点 (動的 vs レキシカル)

宣言SPECIAL、特殊演算子LET、マクロDEFVAR、および Common Lisp における動的スコープとレキシカル スコープに関する StackOverflow のいくつかの質問 (たとえば、 this ) に関するドキュメントを読んだ後でも、次の動作が理解できません。これらのフォームを SBCL で評価します。

変数が defvarさfnれる前にへの 3 番目の呼び出しが出力され、変数が defvar された後に出力されるのはなぜですか?xDINAMIC_1ST_BINDINGxLEXICAL_1ST_BINDING

0 投票する
4 に答える
368 参照

c# - C# チェック式の動的な「スコープ」

(C#で)checked(...)オーバーフローチェックのために式に動的な「スコープ」を持たせることは可能ですか? つまり、次の例では:

checked(add(max, 1))では、関数呼び出しによってオーバーフローが発生するため、式の動的範囲内でOverflowExceptionオーバーフローが発生しても no がスローされます。checked(...)

両方の方法を評価int.MaxValue + 1して をスローさせる方法はありOverflowExceptionますか?

編集:まあ、方法があるかどうか教えてください。または、これを行うためのより良い方法を教えてください(お願いします)。

これが必要だと思う理由は、次のようなコードがあるからです。

が範囲内にある場合、および小さい整数の加算がオーバーフローしたint: ...場合a + bは、これを出力します。単純にすべてを変更するよりも優れたこれを行う方法はありますか (私はたくさん持っています)?intlong: ...Action

0 投票する
3 に答える
259 参照

emacs - 昔の Emacs Lisp 動的スコープの落とし穴に対処する

昔、Emacs はレキシカル スコープをサポートしていませんでした。当時、人々は動的スコープの特定の落とし穴にどのように対処していたのだろうか。

Alice が で定義された関数(Bob によって書かれた関数型プログラミングのための多くの関数を提供するライブラリであると仮定します)my-insert-stuffに依存するコマンドを書き、関数を何度も繰り返し呼び出すためのものであるとします。fp-repeatfp.elfp-repeat

init.elアリスからの内容の一部:

fp.elボブからのコンテンツの一部:

Alice はすぐに、コマンドが期待どおりに機能しないことに気付きます。これは、アリスの使用iとボブの使用がi衝突するためです。昔は、この種の衝突が起こらないようにするために、アリスまたはボブと一緒に何ができたでしょうか?

おそらく、ボブは docstring を次のように変更できます。

0 投票する
2 に答える
2294 参照

scope - レキシカルスコープ vs ダイナミックスコープ

したがって、2 つの異なるスコープ ルールを使用して出力を把握する必要があるという問題があります。a=3レキシカルスコープを使用した出力がandであることは知っていますがb=1、動的スコープを使用した出力を理解するのに苦労しています。
注: 以下のコード例では C 構文を使用していますが、疑似コードとして扱いましょう。

これが私が思いついたものです。動的スコープを使用すると、 および への非ローカル参照ab変更される可能性があります。だから私はa=2( p() から戻る)、そしてb=4( q() の中で)持っています。出力は2 4?

0 投票する
1 に答える
73 参照

closures - Emacs Lisp 動的スコープでクロージャなしで作業する方法

Emacs 24 で字句スコープが導入されたことは知っています。それは素晴らしいことですが、私は常に字句スコープを使用しており、動的スコープを使用して別の視点から見ようとしています。

もともと私はいつもしていることをしただけで、閉鎖に頼っています:

ラムダの実行時に p が未定義である理由を最終的に理解した後、ラムダの実行時ではなく dolist のコンテキストで p の評価を強制するために、これを思い付きました。

これは、クロージャーと字句スコープなしで問題を解決するための古典的な解決策ですか?