問題タブ [lexical-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 投票する
2 に答える
122 参照

perl - Perl 5.12.3 の参照カウントの問題?

パッドのクリーンアップが早すぎるようです:

そして、私が得るものは次のとおりです。

または、誰かが私がやっていることを指し示すことができれば、本当に感謝します. 最初のクロージャーと外側のクロージャーの間にインクリメンタル変数を作成しましたが、それらもリセットされました。最も内側のクロージャーに参照を設定しても、名前付きサブスコープには何もありません!

ここで関係するコード全体は 500 行です。コードを含めることは実際的ではありません。

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

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)も、リクエストスコープの変数を使用する必要はありません。見逃したリクエストスコープを使用する理由はありますか?

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

emacs - Emacs 24 での変数スコープの新しい規則は何ですか?

Emacs 24 には、字句スコープの変数が含まれるようになりました。もちろん、動的スコープの変数もまだあります。両方があるので、変数がいつどのようなスコープを持つかについて、私はかなり混乱しています。レキシカルバインディングがいつ有効になるかを制御する変数があり、動的スコープの変数を宣言するlexical-bindingことについて何か読んだと思いますが、一般的にはかなり迷っています。defvarEmacs 24 の新しいスコープ規則のどこかに適切な説明がありますか? 別の言い方をすれば、Emacs 24 用に書かれた Emacs Lisp コードの変数を見たとき、その変数が使用しているスコープをどのように確認すればよいでしょうか?

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

ruby - Rubyでは、外部スコープの変数にアクセスできるメソッドをオブジェクトに追加するにはどうすればよいですか?

Rubyは初めてです。私は、他の言語と同じように、Rubyで物事を書き込もうとして失敗している段階にあります。

オブジェクトにメソッドを追加しようとしています。たとえば、控えめな配列です。すべてのアレイではなく、1つの特定のアレイだけです。このメソッドは、外部スコープの変数にアクセスできる必要があります。

私の理解ではdef、オブジェクトにメソッドを追加するために使用できますが、メソッドは外部スコープの変数にアクセスできません。そのためにはlambdaorを使用する必要がありますProc.newが、ラムダ/プロシージャをプロパティとして配列に「アタッチ」する方法がわかりません。

JavaScriptでは、このばかげた例が示すように、これは簡単です。

上記に似たものがRubyで可能ですか?

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

perl - Perlでレキシカルバインディングを介して外部パッケージ変数をローカライズしようとしています

長いタイトルですが、質問の真の意味を失わずに一言も聞き出せないのではないかと心配しています。最初に何を達成しようとしているのかを簡単に説明し、次になぜこのようにしたいのかについて長々と説明します。質問のタイトルを順守して直接回答する場合は、とりとめのないものをスキップしてください:-)

簡単な説明

私が望むことだけを行うビルトインが存在すると仮定すると、次のlexicalizeようになります。

理由と理由

ちょっとした文脈のために、私はサードパーティのモジュールをホワイトボックステストしています。

テストが別のものに移る前に、限られた時間だけ変数を変更したいので 、変数をローカライズしたいと思います。local初期値に対するモジュールの選択を知ることに依存せずにこれを行うことがわかった最良の方法です。

字句バインディングが必要な主な理由は 2 つあります。

  1. テスト ファイルの上位の名前空間を汚染したくありません。
  2. 完全修飾名よりも短いものが必要です。簡潔にするためにサンプルコードには含まれていませんが、以前の値に関連する計算と更新を使用して、示されているものよりもはるかに多くの識別子を使用しています。

our別のパッケージから変数を取得しないため、適切に使用できませんでした。一時的に Other::Package のスコープに入るための不正行為はそれをカットしません: ブロック ( { package Other::Package; our $var }) を使用すると、バインディングは有用であるほど長く持続しません。そうでない場合はpackage Other::Package; our @var; package main、前のパッケージの名前を知ってコピーする必要があります。これにより、そのコードの一部を移動しすぎるのを防ぐことができます。

この質問の前の形式を尋ねる前に宿題をしているときに、まさに私が必要とLexical::Varしていたものだと思われるを発見しました。悲しいかな: 「参照を通じてローカライズできません。」</p>

また、- ベースのフォームの直感で最善を尽くしましたmy *varが、構文エラーにぶつかり続けました。今日はスコープとバインドについて、思ったよりも多くのことを学びました :-)

私が望んでいることが不可能な理由が思い浮かびませんが、適切な呪文が見つかりません。残念ながら実装されていないエッジケースを求めていますか?

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

javascript - オブジェクトプロトタイプメソッド内のsetInterval/setTimeout内で「this」を参照する

通常、setInterval内で「this」を参照する場合は、代替の「self」参照を割り当てます。プロトタイプメソッドのコンテキスト内で同様のことを達成することは可能ですか?次のコードエラー。

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

javascript - JS スコーピングの問題

次のコードを検討してください。

これを JSLint で確認するとlevel、2 番目の return ステートメントがused out of scope..

しかし、なぜ?私の知る限り、JavaScriptにはレキシカルスコープ/関数スコープがあります。ネストされた関数がないため、コードは完全に有効である必要があります。または、何か不足していますか?

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

c# - ラムダでのアルファ変換

C# がアルファ変換をサポートしていないのはなぜですか?

収率:

「n」という名前のローカル変数をこのスコープで宣言することはできません。これは、「親または現在の」スコープで別のものを示すために既に使用されている「n」に別の意味を与えるためです。

非常にばかげているように聞こえるので、私が気づいていない粒子状の理由はありますか?

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

language-agnostic - 字句スコープと静的スコープの違いは何ですか?

他の言語から来た人のためのRプログラミングでは、ジョン・クックは次のように述べています。

Rは字句スコープを使用し、S-PLUSは静的スコープを使用します。特にクロージャを使用する場合、違いは微妙な場合があります。

語彙スコープと静的スコープは同義語であると常に考えていたので、これは奇妙だと思いました。

字句スコープと静的スコープには明確な属性がありますか、それともこれはコミュニティからコミュニティへ、人から人へと変化する区別ですか?もしそうなら、一般的なキャンプとは何ですか、そして私は彼らがこれらの言葉を使うときに誰かが意味することをよりよく理解できるようにそれらをどのように区別するのですか?

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

ruby - ブロックにはメソッドが表示されません (シェフのリソース)

2 つのリソースがあるとします。

リソース内のコードを再利用したい。しかし、レシピで proc を定義するとownergroupなどに対して NoMethodError が発生します。なぜですか? レキシカルスコープは違いますよね?その結果、使用する必要がありますself.instance_eval &common_cfg