問題タブ [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.
javascript - 外部関数へのローカル変数
外部関数内の関数にローカルな変数に自由変数としてアクセスしようとしています。
これは私が達成しようとしているものです:
i
のスコープで変数が定義されていないため、エラーが発生しますshow_r
。i
グローバル変数の作成は機能しますが、ローカル変数にする必要がありますi
。
ruby-on-rails - スコープを動的に結合するRuby on Rails
実行時にスコープを動的に組み合わせて、ユーザー入力に基づいてカスタム クエリを作成できるようにしたいと考えています。Book モデルのライブラリ アプリケーションがあり、次のスコープが定義されているとしますchecked_out, fiction, non_fiction, overdue, and checked_out_by
。
,はlast scope
、checked_out_by
引数として library_user_id を取るラムダです。このアプリケーションにより、ライブラリアンは、ユーザー入力に基づいて、これらのスコープを動的に組み合わせたさまざまな種類のクエリを実行できます。したがって、司書がチェックアウトされたすべてのノンフィクションの本を示すレポートを作成したい場合は、次のように簡単に実行できます。
しかし、ラムダとして設定されたスコープでこれを行うにはどうすればよいですか? たとえば、ユーザーが期限切れで特定の人によってチェックアウトされた本を表示するクエリを作成したい場合はどうでしょうか。この場合、criteria 配列に「overdue」スコープと「checked_out_by」スコープを含めたいのですが、ラムダ スコープでそれを設定する方法がわかりません。私は試した:
しかし、それは私に「{:checked_out_by => 6} is not a symbol
」というエラーを与えます。私も試しました
および他のいくつかの亜種がありましたが、どれも機能しませんでした。誰もこれを行う方法を知っていますか?
lisp - Emacs Lisp:なぜこのsexpがinvalid-functionエラーを引き起こすのですか?
問題の性別は
私には、これは に評価されるように見えますが8
、他の Lisp (Racket など) では評価されますが、elisp では代わりに次のエラーがスローされます。
と伝えているようです
有効な関数ではありません。これは間違っているようです。その式を評価すると、
これは私にとって有効な機能のように見えます。なぜこれが起こるのか誰にも分かりますか?動的スコープと関係がありますか?
emacs - emacs lisp における lexical-binding と defvar の間の奇妙な相互作用
次の emacs lisp ファイルは、アリスが init ファイルで字句的にバインドされたローカル変数を使用し、ボブが init ファイルでグローバルな特殊変数としてfoo
定義し、アリスがボブの init ファイルコードの一部を彼女自身の init ファイルに借用した場合に何が起こるかを確認するためのものです。それが特別になることを知っています。foo
defvar
foo
出力:
結果 R1 と R2 は、期待どおりです。結果 R4 は defvar のドキュメントと一致していますが、アリスがボブのコードを読まなければ驚くかもしれません。
R3は意外だった。なぜR3はこうなった?
R4といえば、アリスが
foo
他人に特別にされないようにするにはどうすればいいですか? たとえば、foo
彼女が init ファイルまたは emacs パッケージの 1 つで使用するレキシカル ローカル変数である(defvar foo "something")
可能性があり、たまたま使用するパッケージの一部である可能性があるか、またはfoo
将来のバージョンで導入される新しい特殊変数名の 1 つである可能性があります。 Emacsの。Alice が Emacs に「このファイルでは、外部からのコードが同じ名前の特殊変数を使用している場合でも、foo は常に字句的であるべきです」と言うファイルに入れることができるものはありますか?
c# - C# チェック式の動的な「スコープ」
(C#で)checked(...)
オーバーフローチェックのために式に動的な「スコープ」を持たせることは可能ですか? つまり、次の例では:
式checked(add(max, 1))
では、関数呼び出しによってオーバーフローが発生するため、式の動的範囲内でOverflowException
オーバーフローが発生しても no がスローされます。checked(...)
両方の方法を評価int.MaxValue + 1
して をスローさせる方法はありOverflowException
ますか?
編集:まあ、方法があるかどうか教えてください。または、これを行うためのより良い方法を教えてください(お願いします)。
これが必要だと思う理由は、次のようなコードがあるからです。
が範囲内にある場合、および小さい整数の加算がオーバーフローしたint: ...
場合a + b
は、これを出力します。単純にすべてを変更するよりも優れたこれを行う方法はありますか (私はたくさん持っています)?int
long: ...
Action
emacs - 昔の Emacs Lisp 動的スコープの落とし穴に対処する
昔、Emacs はレキシカル スコープをサポートしていませんでした。当時、人々は動的スコープの特定の落とし穴にどのように対処していたのだろうか。
Alice が で定義された関数(Bob によって書かれた関数型プログラミングのための多くの関数を提供するライブラリであると仮定します)my-insert-stuff
に依存するコマンドを書き、関数を何度も繰り返し呼び出すためのものであるとします。fp-repeat
fp.el
fp-repeat
init.el
アリスからの内容の一部:
fp.el
ボブからのコンテンツの一部:
Alice はすぐに、コマンドが期待どおりに機能しないことに気付きます。これは、アリスの使用i
とボブの使用がi
衝突するためです。昔は、この種の衝突が起こらないようにするために、アリスまたはボブと一緒に何ができたでしょうか?
おそらく、ボブは docstring を次のように変更できます。
scope - レキシカルスコープ vs ダイナミックスコープ
したがって、2 つの異なるスコープ ルールを使用して出力を把握する必要があるという問題があります。a=3
レキシカルスコープを使用した出力がandであることは知っていますがb=1
、動的スコープを使用した出力を理解するのに苦労しています。
注: 以下のコード例では C 構文を使用していますが、疑似コードとして扱いましょう。
これが私が思いついたものです。動的スコープを使用すると、 および への非ローカル参照a
がb
変更される可能性があります。だから私はa=2
( p() から戻る)、そしてb=4
( q() の中で)持っています。出力は2 4
?
closures - Emacs Lisp 動的スコープでクロージャなしで作業する方法
Emacs 24 で字句スコープが導入されたことは知っています。それは素晴らしいことですが、私は常に字句スコープを使用しており、動的スコープを使用して別の視点から見ようとしています。
もともと私はいつもしていることをしただけで、閉鎖に頼っています:
ラムダの実行時に p が未定義である理由を最終的に理解した後、ラムダの実行時ではなく dolist のコンテキストで p の評価を強制するために、これを思い付きました。
これは、クロージャーと字句スコープなしで問題を解決するための古典的な解決策ですか?