問題タブ [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.
scope - 動的スコープの利点は何ですか?
私は、静的スコープが物事を行うための唯一の正しい方法であり、動的スコープが悪魔のツールであり、インタープリター/コンパイラーの不十分な実装からのみ生じることを学びました。
次に、 Common Lisp vs.Schemeの記事からこのスニペットを見ました:
Common Lispが「この点で勝つ」のはなぜですか?動的スコープで行うのが簡単なことは何ですか?私は本当にそれを必要とする/それを良いものとして見ることを正当化することはできません。
objective-c - オブジェクト スコープに何か問題がありますか?
これは、ObjectiveC と Cocoa の学習曲線の一部として、私が書いているプログラムです (他の誰かのプログラムをコピーして学習しないのではなく、自分で作成したものです)。NSView で単純な形状を描画したい (今のところ、楕円形と長方形に限定している)。アイデアは、各 NSBezierPath を NSMutableArray に記録して、保存/読み込み、元に戻す/やり直しも調査/実装できるようにすることです。キャンバスがあり、ツールを選択するために使用する 2 つのボタンと同様に描画できます。パスを処理するために、描画された各オブジェクトの NSBezierPath、色の値、およびサイズの値を保持できる別のオブジェクトを作成しました。これは、配列に格納したいものです。mouseDown/Dragged/Up を使用して、描画パスの座標を取得します。ただし、これは物事が不安定になる場所です。パス/色などを保持するはずのオブジェクトをインスタンス化できます。情報ですが、インスタンス変数を変更しようとすると、アプリがクラッシュし、デバッガーに有用なメッセージが表示されません。コード スニペットは短くするように努めますが、さらに含める必要がある場合は教えてください。コードを機能させるために多くのことを試みたため、コードも少し劣化しました。
プロジェクト: Cocoa ドキュメント ベースのアプリ
次の .m/.h ファイルがあります
MyDocument:NSDocument
- XCode によって生成されたDrawnObject:NSObject
- 描画されたオブジェクト、つまりパス、色、タイプ (楕円形/四角形)、およびサイズを処理しますCanvas:NSView
-まあ、図面を表示し、マウスとボタンを扱います
NSMutableArray
Canvas は、オブジェクトの維持も担当しDrawnObject
ます。
DrawnObject.h
次のようになります。
Canvas.h
このように見えます
ファイルには、マウスを処理するためのいくつかの関数があり、Canvas.m
NSView/XCode もドロップインされ
て
-(id)initWithFrame:(NSRect)frame-(void)drawRect:(NSRect)rect
います。元々mouseUp
、新しいものを配列に挿入しようとしてDrawnObject
いましたが、クラッシュが発生しました。そこで、2 つのBOOL
フラグを使用して、マウスがいつ離されたかを確認します (不格好ですが、しようとしています....)drawRect
配列に挿入します。以下の方法を含め、アプリが失敗する原因を示しました。
これはオブジェクトスコープか何かに関係していると思いますが、私はそれを理解できません。私が言ったように、私がいろいろ試してみると、コードは一種の変容を遂げました。悲しいことに、良い方向ではありません。それらのBOOLSなどのように。
ヘルプ!そこに賢い人がいるなら、私を正しい方向に向けてください!
これを追加:
haskell - Haskell はどのタイプのスコープを使用しますか?
Haskell が動的または静的スコープを使用しているかどうかを把握しようとしています。たとえば、次のように定義するとわかります。
次に、関数を定義します
2 つの異なる「x」がありますが、それは動的にスコープされているということですか? そうでない場合、どのスコープが使用され、その理由は?
また、Haskell 変数にエイリアス (同じメモリ位置/値の別の名前) を付けることはできますか?
ありがとう。
javascript - var self = this?
インスタンス メソッドをイベント ハンドラーのコールバックとして使用すると、スコープがthis
" My instance"から"Whatever just called the callback" に変更されます。だから私のコードは次のようになります
それは機能しますが、それが最善の方法ですか?私には奇妙に見えます。
c# - FOR ループ内での変数の宣言
プロダクションで奇妙なバグが発生しており、調査するように依頼されました。
この問題は、For ループ内で宣言され、各反復で初期化されていないいくつかの変数にまで追跡されました。宣言の範囲により、反復ごとに「リセット」されるという前提がありました。
誰かがなぜそうならないのか説明できますか?)
(私の最初の質問です。回答を本当に楽しみにしています。)
以下の例は明らかに問題のコードではありませんが、シナリオを反映しています:
コード例を許してください。エディターのプレビューでは問題ないように見えますか??
編集:
申し訳ありませんが、育児問題のために急いで行かなければなりませんでした。問題は、prod コードにあったのは、switch ステートメントが巨大で、if (myObject.Prop != null) then testString = myObject.Stringval のように、いくつかの「ケース」でクラスのプロパティのチェックが行われていたことでした。 .. スイッチの最後で、(外部で) testString == null のチェックが行われていましたが、最後の反復からの値が保持されていたため、コーダーがループ内で宣言されている変数で想定したように null ではありませんでした。
私の質問と例が少しずれていたらすみません、デイケアについて一緒に叩いていたときに電話がありました。ループの内外で両方の変数から IL を比較したことを言及しておく必要がありました。では、「ループごとに変数が再初期化されないことは明らかだ」という一般的な意見はありますか?
もう少し情報、変数 WHERE は、ReSharper が「値は決して使用されない」と指摘してそれらを削除することに熱狂するまで、反復ごとに初期化されます。
編集:
皆さん、ありがとうございました。私の最初の投稿として、将来どれだけ明確にする必要があるかがわかります。予期しない変数割り当ての原因は、経験の浅い開発者が ReSharper から指示されたすべてのことを実行し、ソリューション全体で「コードのクリーンアップ」を実行した後、単体テストを実行していないことに起因する可能性があります。VSS でこのモジュールの履歴を見ると、変数がループの外で宣言され、各反復で初期化されていることがわかります。問題の人は、ReSharper が「すべて緑色」を表示することを望んでいたため、「変数を割り当てに近づけて」、「冗長な割り当てを削除しました」! 私は彼がそれを再びやるとは思わない.今週末は彼が逃したすべての単体テストを実行するために費やす!
質問を回答済みとしてマークするにはどうすればよいですか?
python - Python の変数スコープに関する小さな質問
私はpythonの初心者で、質問があります。私にとって非常に混乱しています。最初に関数を定義し、その関数内で、以下の別の関数で定義されている変数を使用する必要がある場合、このようにすることはできますか? または、別の関数の戻り値を関数にインポートするにはどうすればよいですか? 例えば:
python - 最初の使用後に再割り当てすると、ローカル変数の UnboundLocalError
次のコードは、Python 2.5 と 3.0 の両方で期待どおりに機能します。
ただし、行(B)のコメントを外すと、UnboundLocalError: 'c' not assigned
行(A)が表示されます。a
との値はb
正しく出力されます。これには、次の 2 つの理由から完全に困惑しています。
行(B)の後のステートメントが原因で、行(A)で実行時エラーがスローされるのはなぜですか?
エラーが発生しているのに、変数
a
とb
期待どおりに出力されるのはなぜですか?c
私が思いつく唯一の説明は、ローカル変数c
が割り当てによって作成されるということc+=1
です。これは、ローカル変数が作成される前であっても、「グローバル」変数よりも優先c
されます。もちろん、変数が存在する前にスコープを「盗む」ことは意味がありません。
誰かがこの動作を説明してもらえますか?
programming-languages - スコープ アナライザーに適した API
私はいくつかのコード生成ツールに取り組んでいますが、多くの複雑さはスコープ分析を行うことから生じます。などのことを知りたいと思うことがよくあります。
- 関数またはブロックの自由変数とは?
- このシンボルはどこで宣言されていますか?
- この宣言は何を覆っていますか?
- このシンボルの使用は、初期化の前に発生する可能性がありますか?
- この変数は潜在的にエスケープしますか?
そして、私のスコーピングクラッジを再考する時が来たと思います.
私はこの分析をすべて行うことができますが、使いやすく、理想的には、この作業を十分に遅延して実行できるように、API を構造化する方法を見つけようとしています。
人々がよく知っているこのようなツールは何ですか?また、API で何が正しく行われ、何が間違っていたのでしょうか?
c# - 内部メソッドとデータ構造。
保護されたメソッドがある場合、データ型が内部で宣言されているパラメーターを渡すことはできますか?
c# - LINQクエリ-これらの例が異なる理由の説明が必要
「LINQPocketReference」という本を読んでいて、頭を動かすのが難しいという特定の例(以下で少し変更)があります...本の説明は少し短いので、疑問に思いました。誰かが私のためにそれを段階的に分解して、それが理にかなっているようにすることができます...
これを出力します:
これは私には完全に理にかなっています...しかし、これはそうではありません。
そうではありません...
誰かが私にここで何が起こっているのかを正確に説明してもらえますか?