問題タブ [nested-class]

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 投票する
5 に答える
633 参照

c# - ネストされたクラスをどこでどのように使用するのですか?

クラスが別のクラスでのみインスタンス化される場合は、そのクラスにネストして使用するのが正しいと考えています.これは良い設計に役立つと思います.私のプロジェクトを見ると、そのようなネスト構造はほとんど見たことがありません.しかし、クラスをネストしようとすると、今度は別の質問が頭に浮かびます.たとえば

Board クラス、ShortCastle、LongCastle、EnPassant、Promote などの Move クラスと、Pawn、Queen、Rook、Knight などの Pieces があります。したがって、Board クラスが Piece クラスをインスタンス化し、Piece クラスが Move クラスをインスタンス化することは明らかです。優れた設計では、プロモート ムーブ クラスはポーンのネストにする必要があります。これは、ポーンだけが自身をプロモートできるためです。短いキャッスルと長いキャッスルはキングのネストにする必要があります。キングだけがそのようなタイプのムーブを持つことができるからです。

すべての Piece クラスを Board クラスに入れようとすると、8 ~ 9 クラスが Board クラス内に配置され、1 つの Board クラス ファイルが大きすぎて読みにくくなるため、見栄えがよくありません。ファイル。部分的なボード クラスを作成できるのは良いことですが、それでも、8 ~ 9 個の部分的なボード クラス ファイルが各ピース クラスを保持するのは面倒ではありませんか? それらを入れ子にしない方が良いですか?Pieces についても同じです 別の Move タイプ クラス用に別の部分的な Piece ファイルを作成しますか? ネストされたクラスが小さなスペースしかとらない場合は問題ありませんが、多くのメソッドが必要な場合は?

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

c++ - ネストされたクラスを使用した奇妙なenable_ifの動作(MSVCコンパイラのバグまたは機能?)

コードのデバッグにかなりの時間を費やした後、enable_ifを使用して、問題の理由を予期しないテンプレートの特殊化の結果まで追跡しました。

次のコードは、Visual Studio 2010(および2008)のDoTest()でのアサーションに失敗しますが、g++3.4.5では失敗しません。ただし、SomeClassからテンプレートを削除するか、 my_conditionをSomeClassのスコープ外に移動すると、MSVCでも機能します。

この動作を(少なくとも部分的に)説明するこのコードに何か問題がありますか、それともこれはMSVCコンパイラのバグですか?

(このサンプルコードを使用すると、boostとc ++ 0x stlバージョンで同じです)


条件をスコープ外に移動して修正しようとすると、std :: enable_ifを使用する場合でもこれでは不十分であることに気付きましたが、少なくともboost :: enable_if:で機能します。

誰かがこれについて説明してくれることを願っています。

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

nhibernate - ネストされたクラスに対する NHibernate クエリ

私はNHibernateを使用しています。ネストされた型を持つクラスがあります。NHibernate を使用して、ネイティブ SQL クエリを使用する以外に、ネストされた型に対してクエリを実行する方法はありますか?

現在、ネストされたクラスは HQL では許可されていません

編集: 外側のクラスには、ネストされたクラス インスタンスの IList があります。

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

c++ - テンプレートフレンドとネストされたクラス

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

foo<T>::barのすべてのインスタンス化を、の友達にしたいと思いfoo<T>::bar<S>ますS。がネストされたテンプレートでない場合bar、上記の構文は問題なく機能します。しかし、私が例えばそうするとき

MSVC8(Visual C ++ 2005)はそれを好きではありません:

コンパイラを使用すると、同じエラーが発生します

代わりは。どうすれば私が望むことを達成できますか?

編集:私はダブルチェックしました(ここは朝です、そして私は本当に起きていません)、これはVC8のバグのようです:

0 投票する
13 に答える
3723 参照

c# - ネストされたクラスを使用する理由は何ですか?

このstackoverflowの回答では、コメント投稿者が「プライベートネストされたクラス」は非常に役立つ可能性があると述べたので、ネストされたクラスが技術的にどのように機能するかを説明する傾向があるこのような記事でそれらについて読んでいましたが、それらを使用する理由は説明していません。

より大きなクラスに属する小さなヘルパー クラスにはプライベート ネスト クラスを使用すると思いますが、多くの場合、別のクラスのヘルパー クラスが必要になるため、(1) ネストされたクラスを非-nested または (2) public にしてから、outer-class プレフィックスを付けてアクセスします。これはどちらも、最初にネストされたクラスを持つための付加価値のない余分な作業のようです。したがって、一般的に、おそらくクラスをグループにもう少し整理する以外に、ネストされたクラスのユースケースは実際には見られませんが、それは私が楽しむようになったファイルごとに1つのクラスという明確さに反します.

コードをより管理しやすく、読みやすく、効率的にするために、ネストされたクラスをどのように使用しますか?

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

ruby - Ruby でネストされたクラスを参照しようとするとエラーが発生するのはなぜですか?

次の例でエラーが発生するのはなぜですか?

ClassEを入力するのではなく、を作成する別の方法はありますclass ClassA; class ClassEか?

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

python - (Python)予期しないときに作成されたクロージャ

ネストされたクラスを作成するときに予期しないクロージャが発生しました。これはメタクラス、スーパー、またはその両方に関連するものだと思います。これは、クロージャがどのように作成されるかに間違いなく関係しています。私はpython2.7を使用しています。

これが私が見ているのと同じ問題を示す5つの単純化された例です(それらはすべて最初のものから構築されます):

例1:

例2:

例3:

例4:

例5:

これが私が理解していることです(例を参照):

  • メタクラスは継承されるため、のメタクラスSubclassを取得しBaseます。
  • 影響を受けるのは影響を受けるだけ__init__で、Subclass.otherメソッドは影響を受けません(#1)。
  • 削除Subclass.otherしても違いはありません(#1)。
  • self.name=nameから削除しSubclass.__init__ても違いはありません(#1)。
  • クロージャセル内のオブジェクトは関数ではありません。
  • オブジェクトはMetaclassまたはではありませんが、 (#1)と同じようBaseに、タイプのオブジェクトがあります。MetaclassBase
  • オブジェクトは、実際にはネストされたタイプSubclass(#1)のオブジェクトです。
  • とのクロージャーセルはt1.subclass.__init__t1.subclass2.__init__2つの異なるクラス(#1)からのものですが、同じです。
  • Subclass(#1)の作成をネストしない場合、クロージャーは作成されません。
  • 電話をかけないとsuper(...).__init__Subclass.init__クロージャーは作成されません(#2)。
  • noを割り当て__metaclass__てから継承するとobject、同じ動作が表示されます(#3)。
  • のクロージャセルのオブジェクトt3.other.__init__t3.other(#3)です。
  • メタクラスに__init__(#4)がない場合も、同じ動作が発生します。
  • Baseがない場合__init__(#4)も同じ動作が発生します。
  • 例4の3つのサブクラスのクロージャーセルはすべて異なり、それぞれが対応するクラス(#4)と一致します。
  • をにsuper(...).__init__置き換えるとBase.__init__(self)、クロージャーが消えます(#5)。

これが私が理解していないことです:

  • なぜクロージャーが設定されるの__init__ですか?
  • なぜクロージャーが他のクロージャーに設定されないのですか?
  • クロージャーセル内のオブジェクトが、__init__属するクラスに設定されているのはなぜですか?
  • super(...).__init__が呼び出されたときにのみこれが発生するのはなぜですか?
  • Base.__init__(self)が呼び出されたときになぜこれが起こらないのですか?
  • これは実際にはメタクラスの使用とはまったく関係がありますか(おそらく、デフォルトのメタクラスはtype)ですか?

助けてくれてありがとう!

-エリック

(更新)これが私がその時見つけたものです(ジェイソンの洞察に基づいて):

まず、関数の名前はそれ自体の本体内のスコープ内にあります。次に、関数は、それらの関数を参照する場合、それらが定義されている関数のクロージャを取得します。

関数名がそのようなスコープにあることに気づいていませんでした。同じことがクラスにも当てはまります。クラスが関数のスコープ内で定義されている場合、クラスのメソッド内でそのクラス名を参照すると、次のように、クラスはそのメソッドの関数のクロージャにバインドされます。

ただし、非関数に対してクロージャを作成できないため、以下は失敗します。

良いもの!

0 投票する
7 に答える
291 参照

java - インターフェイス内にクラスをネストすることは良い考えですか?

Javaのインターフェース内に内部クラスを持つことは可能ですか???

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

python - プロパティとしての疑似辞書

私は、2つのC疑似 と を持つべきPythonクラスを持っています。疑似辞書という用語は、辞書が実際には存在せず、キーがアクセスされるたびに「再計算」されることを意味します。dictab

擬似コードでは、これは次のようになります。

aとのクラスを実装することもできますbが、どちらもいくつかの短いメソッドしかないため、これを行うためのよりエレガントでコンパクトな方法があるかどうか疑問に思います。

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

java - ネストされたクラスを別々のファイルに入れる

ネストされたクラスを含むファイルがありますが、読み取り不能になるほど長くなっています。ネストされたクラスを別々のファイルに分割する方法はありますか?