問題タブ [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.
r - レキシカル スコープ / 呼び出しスタックの問題: R が引数のデフォルト値を認識できない
これは、私が R で遭遇した中で最も奇妙なものです。
特定の引数名 (lazy
私の場合) は特別/予約されているため、3 つの異なるパッケージの関数にまたがる呼び出しスタックが関係している場合に予期しない動作につながる可能性はありoptionr::setAnywhereOptions()
ますnestr::setNested()
かreactr::setShinyReactive()
?
次の例/状況を検討してください (このGitHub の問題にも記載されています) 。
パッケージ内のこの単体テストから適応optionr
デバッグ用に含めたステータス メッセージに注意してください。
なんらかの理由で、この非常に呼び出し元のスタック構造について、関数reactr::setShinyReactive()
はデフォルト値を認識しないように見えますがlazy
、他のもの ( のそれなどpush
) は問題なく認識されているようです。
より正確に言うと、私の回避策 (以下を参照) がなければ、R はこのコード セクションに到達すると文句を言うでしょう。ただし、ご覧のとおり、デフォルト値が定義されており、関数がスタンドアロンまたは 内から呼び出された場合にも問題なく機能しますnestr::setNested()
。
回避策
引数名を to からlazy
toに変更するとis_lazy
(または、単にインクルードして本体でis_lazy
実行lazy <- is_lazy
すると)、すべて正常に動作します (上記のデバッグ出力を参照)。
のDEBUGセクションを参照してください。reactr::setShinyReactive()
ここで何が起こっているのかを勝手に推測する
私の頭に浮かぶ最初のことは、「単純な関数呼び出しスタック」の動作が表示されないため、これはレキシカルスコープメカニズムと関係があるに違いないということです。
2 番目の推測は、S4 メカニズムもここで何らかの問題を引き起こしている可能性があるということです。たぶん、この問題にも関連していますか?
lambda - HHVM/ハック ラムダ式でレキシカル スコープ変数の値を変更しますか?
ハックラムダ式でレキシカルスコープの変数の値を変更することは可能ですか?
戻り値はfalse
ruby - デフォルトの引数値の指定で評価されないコード
(少なくともある種の) Ruby コードは、メソッドのデフォルト値指定内で受け入れられ、評価されます。以下で"foo" * 3
は、評価されます。
しかし、次のようにデフォルト値の記述で特定のスコープでローカル変数/メソッドを評価しようとすると、ローカル変数/メソッドはレキシカル スコープで評価されます。
foo
上記がスコープ内で評価されずMAIN
、レキシカルスコープで評価されるのはなぜですか?- これは、デフォルト値の記述で評価できる Ruby 式に制限があるようです。正確には何をそこに置くことができますか?
javascript - Bubbling scope - Updating var from nested function
I'm updating a variable from an outer scope in a nested function,
as this is happening during a init function the outer scope isn't the outermost (window) scope;
in order to save it in the init-function scope I'm omitting the var keyword and as expected the new value of the variable bubbles up and updates;
but the result of console.log('x' in window )
is false,
isn't the bubbling supposed to get to the window scope?
r - ネストされた R 関数のスコープ
R でのスコーピングを理解しているかどうかわからない、正しいことをしているとは思わない例があります。この例は、J. Fox による「R および S-PLUS Companion to Applied Regression」から変更されています。
私がリストで予想したことは、恒等関数、平方関数、および立方関数をそれぞれ計算する 3 つの関数が、それらの引数をすべて 3 乗した場所にあることです。ラップリーを使用しない場合、期待どおりに機能します。
これを驚くべき、または不安に思うのは私だけでしょうか? それには深い満足のいく理由がありますか。ありがとう
PS: Google と SO で検索を実行しましたが、おそらくこの問題に関連するキーワードが一般的であるため、手ぶらで出てきました。
PPS: この例は、純粋な好奇心ではなく、パッケージのクイックチェックの実際のバグによって動機付けられています。バグの回避策があります。ご心配ありがとうございます。これは何かを学ぶということです。
もちろん、質問を投稿した後、問題を明確にする別の例のアイデアが得られます。
p は、lapply に隠されているループ変数と同じ役割を果たします。p は、この場合は make.power への参照のように見えるメソッドによって渡されます。Make.power はそれを評価せず、ポインターを保持するだけです。私は正しい軌道に乗っていますか?
lisp - 記号と名前は違うのですか?
記号と名前は違うのですか?一般的な Lisp に焦点を当てている Paul Graham によるLisp では、そのように思われるいくつかの議論があります。
ラムダ式は関数の名前でもあるため、関数呼び出しの最初に現れることもあります:
((lambda (x) (* x 2) 3)
6
これにより、シンボルは名前のように聞こえますが、名前はシンボルではありません。しかし、私は Lisp の「オブジェクト」シンボルがどのようなものであるか、またはその可能性があるかを理解していません。
これは、ここでのシャープクォート ( ) 演算子 v.に関する私の質問にも由来しています。これらが異なる唯一の理由は、すべての名前が記号であるとは限らないためだと思いますが、それらの答えを理解するのに十分な背景がまだありません(したがって、この質問です)。#'
symbol-function
私はまた、elisp 対 common lisp の説明を求めています。これは、バージョン 24 (24.1 だと思います) まで elisp に導入されなかった語彙形式に関係していると思います。
scope - Common Lisp のクロージャによって、囲んでいる関数への引数がキャプチャされないのはなぜですか?
test.lisp
:
そしてREPLで:
Common Lisp は最近では字句的にスコープされるはずだと思っていたのに、 の値がvar1
の内部ラムダによってキャプチャされないのはなぜtest
ですか? キャプチャされていることを確認するにはどうすればよいですか?
r - 関数内の関数のレキシカルスコープはいつ決定されますか?
R で他の字句スコープの質問を見てきましたが、答えが見つかりません。次のコードを検討してください。
f(3)
は 10 の答えを返します。私の質問はなぜですか? g()
コードで定義されている時点ではz
、値は割り当てられていません。クロージャーはどの時点でg()
作成されますか? 関数本体の残りの部分を「先読み」しますか? が評価されるときに作成g(x)
されますか? もしそうなら、なぜですか?