問題タブ [shadowing]
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.
c# - シャドーイングを防ぎ、特定のメソッドを促進する方法は?
C++では「使用」で行われ、C#では?
を昇格させる方法foo.print
、したがってfoo.print
、bar.print
コンパイラーと同じ「レベル」になります(bar
もちろん)?
更新 1
最初に、シャドウイングとオーバーライドの一般的な混同に関する段落を追加しましたが、読者に不快感を与えると考えたため、削除しました。
シャドウイングは、継承ツリーにまたがるオーバーロードのようなものです。シャドーイングはオーバーライド されません。
更新 2
オーバーロードされたメソッドを解決するときに、シャドーイングの後foo.print
が考慮されなくなりましたprint
。昇格するfoo.print
と、プロセスに戻ります。つまり、メソッドを呼び出すとbar_object.print("hello")
、メソッドfoo.print
が呼び出されます。
java - メソッド内の変数のシャドウイング
私はJava 6の認定書を読んでいました.そして、「シャドウ変数」に関する例がありました:
そして、これは結果です:
私の質問は次のとおりです。変数「番号」が最初に 28 の場合、メソッドを使用すると、変数が 99 と 420 に変更されます。しかし、メソッドが終了すると、変数「番号」はなぜ28 の代わりに 99 の値? 元の値(28)を持つと思いました。
java - Java での変数とメソッドのシャドーイング
基本的に、インスタンスメソッドによって静的メソッドをシャドウできない理由を知りたいのですが(理由はわかっていますが、特定の状況ではあいまいさにつながります)、静的変数はインスタンス変数によってシャドウすることができます(サブクラスにのみ適用されます) )。
例:
したがって、スーパークラスでint area
(インスタンス変数)を宣言しようとすると、エラーが発生しますが、サブクラスからまだ可視でstatic int area
あっても、サブクラスで宣言するとエラーは発生しません。static int area
インスタンスメソッドで静的メソッドをシャドウイングしようとすることと、インスタンス変数で静的変数をシャドウイングしようとすることの動作の違いは何ですか。
前もって感謝します。
java - サブクラスでのメンバーのシャドーイング
次のアウトラインの例を検討してください。
私の質問は、ライン「AAA」についてです。ここでの目標は、スーパークラスから継承されたコンテキスト メンバーが参照されるたびにキャストする必要がないようにすることです。言い換えれば、私はむしろ
それ以外の
毎回。
このアプローチは機能しているように見えますが、正しいかどうか、またはこのようなことを行うことに問題があるかどうか疑問に思っています。私の場合、これはあいまいさにつながることはありませんが、一般的にどのようになるかはわかりました。
context
また、ここで新しいオブジェクトを作成するのではなく、メソッドが参照メンバーを異なる方法で解釈するようにしたいだけです。
別の方法は、 のcontext
ような名前に変更することだと思いますrawContext
が、これが望ましいかもしれません。
前もって感謝します
jvm - Java はフィールド シャドーイングと JVM を継承していますか?
フィールドが継承によってシャドウ/非表示になり、後でJVM仕様の一部として解決されるメカニズムはありますか? これはJava 仕様の一部であり、多くのブログ投稿や SO の質問で見つけることができます。しかし、実際にフィールド解像度の JVM 仕様を見てみると、JVM 仕様のpdf のどこにも「隠蔽」または「シャドウイング」という言葉は現れません。
私は自分自身の JVM を作成していて、このフィールド シャドウイングがバイトコード/VM のプロパティであり、Java コンパイラまたは Java-the-language の一部ではないことを発見したため、これを尋ねます。これを VM レベルで実装する適切で信頼できる方法を知りたいです。この重要な JVM の (誤った?) 機能は、どこかに正式に文書化する必要がありますか?
haskell - タイプAはHaskell(ghciインタプリタ)のタイプAと等しくありませんか?
GHCi は、 type が typeA
ではないことを教えてくれA
ます。なんで?
erlang - Erlang の 2 番目のメッセージでプロセスがクラッシュする
Erlang で実装された単純な車のプロセスがあります。
アイドル状態にすることはできますが、idle を 2 回続けて呼び出すと、次のように壊れます。
なんで?
c++ - パラメーター C++ をシャドウする興味深いケース (if ブロックでシャドウされないパラメーター)
今日、驚くべきことに、次のコードが完全に有効であることを発見しました (gcc 4.4.5):
私は本当に驚いています。受け入れる必要がある場合は、新しい変数が独自のブロック内にあり、外部のコードの残りの部分が引き続きパラメーターにアクセスできるため、パラメーターが実際にはシャドウされていないため、それはある程度理にかなっていると言えます。しかし、それでも意味がわかりません。なぜこれを無効な構文にしなかったのですか? これを許可しても何のメリットもないと思います。実際、これによって引き起こされたバグを掘り下げる必要がありました。それは長い関数であり、パラメーターと同じ名前を持っていることに気付かずに独自の変数を作成しました。コードのいくつかの行 (同じブロック) は、まさにそのパラメーター変数に依存しており、今では私のバージョンを使用しています。そして、私の一日は1時間になります。
私はコンパイラについて非常に表面的な知識を持っているので、誰かがこの動作の背後にある完全なストーリーを説明してくれませんか? 比較として、このような Java コードでは無効です (重複変数)。