問題タブ [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.
lambda - スキームで「ラムダを超える」形式で複数のローカル関数を定義する
相互に呼び出すことができるSchemeで複数の字句スコープ関数を定義することに興味がありました。SICPで作業し、演習1.8を解決するためにブロック構造を使用して次の関数を作成しました(ニュートン法を使用して立方根を計算します)。
これは問題なく動作しますが、Scheme(およびおそらくCommon Lisp)が字句スコープとlet
フォームを使用してこの同じシナリオをどのように処理するのか疑問に思いました。let
私は次のkludgyコードを使用してそれを実装しようとしました:
以下に表示される問題は、プロシージャcbrt-iter
を呼び出そうとしたときです。プロシージャは最初のネストされたブロックのスコープに対してのみローカルであるため、 good-enough?
それにアクセスする方法はありません。これは、の囲みの中に関数をネストすることで解決できるようですが、これも非常に厄介で厄介なようです。good-enough?
let
cbrt-iter
cbrt-iter
let
good-enough
define
この場合、それを行うフォームは何が異なりますか?フォームは「letoverlambda」フォームではなく式にdefine
拡張されていますか(フォームを使用してLittle Schemerの本で同様のことが行われたことを思い出しますが、これがどのように機能するかはわかりません)。また、比較として、Common Lispはこの状況をどのように処理しますか?字句スコープのを使用することは可能ですか?lambda
((lambda (x) x x) (lambda (y) ...))
defun
javascript - Javascript-クロージャ-字句スコープ-入れ子関数にループ変数データを含める方法は?
重複の可能性:
Javascriptの悪名高いループの問題?
私は次のコードを持っています:
ライブラリ関数はfooterTemplate関数を呼び出します(次にbuildFooterを呼び出します)。buildFooterのアラートは、フィールドが常に同じ値(テストのforループで繰り返される最後の値)であることを示しています。適切なフィールド値を使用してbuildFooterを呼び出すにはどうすればよいですか(つまり、
と
等々...
function - emacs lisp は関数の語彙的再定義をサポートしていますか?
最近のバージョンの Emacs は、elisp コード内の変数の字句バインディングをサポートしています。関数を字句的に再定義することも可能ですか? つまり、Emacs Lisp には次のようなものがありlexical-flet
ますか?
c++ - C++でレキシカルスコープとしてラムダを使用する方法
コードは次のとおりです。
結果として期待して100
いました。ただし、でa
キャプチャするとフリーズするようなものf
です。結果は1
です。a
変更時に一貫性を保つ方法はありa
ますか?
racket - Racket: レキシカル スコープの内部
Haskell では、リスト内包表記内で、反復ごとに式を変数にバインドできます。
for
Racket の理解でレキシカル変数をバインドするにはどうすればよいですか?
現在、私はこのコードを持っています:
(* i j)
変数にバインドし、関数内のどこでも式をそれに置き換えたいと考えています。
ruby - Ruby Koans - レキシカルスコープと継承階層の継続
私は StackOverflow を見回す機会があり、Ruby Koans からよりよく理解しようとしていたこの同じ質問を見つけました ( Ruby Koans: クラス定義の明示的なスコープ パート 2 )。
リンクの説明に基づいて、他の人 (私を含む) が持っていた主な混乱は、クラス定義が原因だったようです:
私の当初の考えでは、MyAnimals::Oyster は Oyster クラスが MyAnimals 内で定義されたことを意味するというものでした。つまり、上記のコードは次のコードに似ていると思いました。
私の考えをテストするために、IRB で次のことを行いました。
私の推論が正しければ、以下のコードは 2 を返すと予想されます。
これは 2 を返さないので、なぜ 2 を返さないのか説明してもらえますか?
編集: Animal クラスの追加を怠りました。ここにあります:
ruby - Ruby - レキシカルスコープと継承
これは、元の SO の質問の続きです: Ruby ネームスペースに "::" の代わりに "module ..." を使用する
元のSOの質問では、ここに提示されたシナリオがありますが、私はまだ理解に苦しんでいます:
最初の呼び出しが 555 を返す理由と、2 番目の呼び出しが 123 を返す理由を誰かが説明できますか?
emacs - このフォームが let フォームのレキシカル コンテキスト内で評価されないのはなぜですか
S 式を取り、それらをフィクスチャの字句コンテキスト内で評価する関数を作成するマクロを作成しようとしています。これが私が書いたマクロです:
しかし、私がそれを実行すると、私が提供した字句コンテキストの外で実行されているようです
ところで、変数の字句バインディングを有効にしました。私の間違いは何ですか?