問題タブ [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.
loops - ループ マクロでの Common Lisp バインディング
ループ内で特殊変数を再バインドしたい。さて、通常、これはlet
.
しかし、loop
マクロにはこれらの素敵なwith
句があるので、そこでできるかもしれないと思いました。式(macroexpand '(loop with *read-eval* = nil))
はバインディングを alet
に展開することになるため、特に私の実装では確実に機能します。しかし、これが標準化された動作であることを示す標準には何も見つかりません。だから、私の質問はこれだと思います:
既存の変数を変更するために準拠する実装が必要です*read-eval*
か、それとも同じ名前の新しいレキシカル変数を作成するリスクがありますか?
scope - 静的スコープと動的スコープの違い
私の先生は次の疑似コードを提供しており、静的スコープを使用した出力は1 2 3
であるが、動的スコープを使用した出力は であると言っています2 3 4
。
課題は静的スコープにあります。メインまたはいいえに注意せずに a=1、b=2、c=3 を使用します。a=1、b=2、c=4 を使用しますか? C ルールを含まない静的スコープのみ。
scope - SASマクロ変数がデフォルトでローカルスコープにならないのはなぜですか?
マクロ変数のスコープに関連する問題を解決しようとしているときに、この非常に役立つ SO ページを見つけました。 %let がローカル マクロ変数を作成しないのはなぜですか?
要約すると、%let x = [];
または%do x = [] %to [];
マクロで記述すると、次のようになります。
- グローバル シンボル テーブルに「x」が存在しない場合は、ローカル スコープのマクロ変数 x を作成します。または、
- 「x」がグローバルシンボルテーブルにある場合、グローバルスコープマクロ変数「x」を更新します
これは非常に非直感的だと思います。この設計の選択により、SAS の荒野に大量のバグが発生していることは間違いありません。「i」や「counter」などの一般的な変数名を使用するループ ステートメントの上であっても、マクロで %local ステートメントを目にすることはめったにありません。たとえば、SUGI および SAS グローバル フォーラムの論文のリストから、タイトルに「マクロ」という単語が含まれる最初の論文を見つけました 。 =スギ
実際、私が開いた最初の SAS カンファレンス ペーパーでこのコードを見つけました。
http://support.sas.com/resources/papers/proceedings15/1340-2015.pdf
%flag を呼び出し、独自の &j 変数を持っている人は悲惨です。%flag を呼び出した後、どこでも &j が 4 になるため、ログ エラーは発生せず、偽の結果が簡単に発生する可能性があります。これは (経験上) 追跡するのが楽しくないバグになります。さらに悪いことに、彼らは自分の結果が偽物であることを決して認識しないかもしれません.
だから私の質問は、すべてのマクロ変数をデフォルトでローカルスコープにしないという決定がなされたのはなぜですか? SASマクロ変数のスコープがそのように機能するのには、正当な理由がありますか?
arrays - angularjs で動的スコープ配列変数の値を取得する
動的にアクセスしようとしているスコープ配列変数があります。その値はすでに設定されています。
こんな感じです。
以下のように動的にアクセスしようとすると、未定義になります。
ただし、次を使用して直接アクセスできます。
スコープ変数の値を動的に取得する方法は、他の方法では問題なく機能しますが、変数名に角かっこ、つまり [ ] が含まれている場合は失敗します。
この例に従いましたが、配列または角括弧 [ ] を含むスコープ変数では成功しませんでした。
$parse サービスを使用したスコープ配列変数の動的設定も、以下のように正常に機能します。
raku - Perl 6 コア設定で temp が機能しないのはなぜですか?
私は調べていて、実装でこのコメントを見ましたindir
:
my
この の使い方は奇妙だと思ったので、 doc issue #1082my
で が実際に語彙的であるかどうかを気にするようになりました。temp
動的変数に対するユーザーレベルの一時的な変更には、それがより適切だと思っていたでしょう。
しかし、今、このコメントを見ましたが、それが何を意味するのかよくわかりません。temp
こんなに深く壊れたの?ここでは利用できませんか?それともコメントが間違っていますか?
コメントが正しければ、動的変数を処理するこの方法は日常のプログラマー レベルに漏れているのでしょうか。
そして、このレベルは実際にはどれくらい低レベルですか?Perl 6 はすべてここで入手できるようです。