問題タブ [mixins]

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

.net-4.0 - MixIns機能を実現するための.NET4.0インターフェイスコードコントラクト機能の悪用

.NET 4.0には、その新しいコードコントラクト機能があります。ここで説明されているように、インターフェイスでも機能します(コメントのどこかにスクロールダウンしてください)。

http://weblogs.asp.net/podwysocki/archive/2008/11/08/code-contracts-for-net-4-0-spec-comes-alive.aspx

今私の質問は、いくつかのMixIns機能を実現するために、これらのコントラクトクラスにさらにカスタムコードを追加することで、この「デフォルトのインターフェイス実装機能」を使用および悪用できるかどうかです。

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

c++builder - VCL 多重継承

私は、サイジングに関して多くの共通の動作を持つ一連のコントロールを開発しようとしています。これは多重継承が必要な例だと思います (反対のアドバイスは喜んで受け入れますが)。私がやりたいことは、基本的にミックスインパターンです

などなど…

私は Sizable クラスにかなりの量のサイジングコードを書き、それをテストしましたが、それは素晴らしいことでしたが、今では構造の残りの部分を設定しました (そうです、最初にクラスのスケルトンを書くべきだったでしょう)。悲しいことにそれを発見しました:

メンバー関数である必要のないすべての関数 (文字列の長さの測定など) を取り出しましたが、これができない関数がまだたくさんあります。

大量のコードを複製する必要がないように、設計に関するアドバイスはありますか?

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

perl - MooseX::NonMoose クラスのミックスインの問題

次の点を考慮してください。

これをコンパイルしたときの出力は次のとおりです。

なぜ私は気にするのですか?useCGI::Application::Plugin::* クラスを実行しようとするとCGI::Application、コンパイル時にすでに継承していると想定されるためです。add_callbackプラグイン クラスは、私のクラスのクラス メソッドとして呼び出そうとしますが、@ISAまだ設定されていないためできません。

これを解決する最善の方法は何ですか? @ISAブロックを手動で微調整BEGINすると干渉しMooseX::NonMooseますか?

編集

以下は機能しているように見えますが、不快だと思います。

これが良いアイデアかどうかを知るには、Moose の内部構造について十分に (または実際には何も) 知りません。

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

.net - 複数の継承された動作を可能にするBDDスタイルのフレームワークはありますか?

システムテストの多くはBDDスタイルで記述されており、重複を最小限に抑えるために継承された動作を適切に利用しています。たとえば、これは購入テストの基本的な階層である可能性があります。

この場合、BehavesLikeSuccessfulPurchaseアカウントステートメントにデビットエントリが必要であるなどの一般的な動作をBehavesLikePurchaseWithValidCreditCard定義し、クラスは有効なクレジットカードを使用して任意のタイプの製品を購入するためのテストワークフローを定義するため、テストは具体的な製品インスタンスを提供するだけの小さな派生クラスです。 、例えば

ただし、具体的な製品タイプによっては、追加のチェックも必要です。たとえば、ビデオが正常に購入されるたびに、ユーザーのビデオライブラリに追加されていることを確認します。理想的には、これは別のクラスによって定義され、架空の構文を使用して混合される可能性があります。

ただし、もちろんC#は多重継承やミックスインをサポートしていないため、追加の動作に呼び出しを転送するボイラープレートメソッドを大量に作成することになります。この動作は、動作が変わるたびに変更する必要があります。

私たちが本当に必要としているのは、観察すべき追加の動作のタイプを提供するだけで、テストからの複数の動作をサポートする独自のメカニズムを備えたフレームワークです。私はxUnitと仕様の例を見てきましたが、そのトリックを実行できるいくつかの拡張機能を考え出すことは可能であるように見えますが、すでに存在するものはありますか?

0 投票する
6 に答える
12374 参照

ruby-on-rails - 複数のモデルで共通のコードをどこに配置するか?

同じメソッドを含む 2 つのモデルがあります。

これはどこに置けばいいですか?

一般的なコードがRails アプリのlibディレクトリにあることは知っています。

libしかし、それを' ' という名前の新しいクラスに入れ、Fooその機能を my の両方に追加する必要がある場合、次のActiveRecord modelsようにしますか?

と の両方Aでメソッドを定義したかのようにメソッドBが含まれますか?foo

0 投票する
5 に答える
5086 参照

ruby-on-rails - 基本クラスと基本モジュールによる ActiveRecord モデルのリファクタリング

クラス A と B は同一です。

このようなリファクタリングと基本クラスの違いは何ですか:

ベースモジュールを使用してこのように:

ある方法は別の方法よりも望ましいですか?

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

ruby-on-rails - Rails - モジュールで作成したメソッドをテストで使用できないのはなぜですか?

lib ディレクトリにモジュールを作成し、そこに含まれるさまざまなメソッドを Rails アプリ全体で (インクルード ModuleName を追加した後) 問題なく自由に呼び出すことができます。

ただし、テストに関しては、そのような方法が存在しないと不平を言っています。モジュールをテストヘルパーに含めようとしましたが、うまくいきませんでした。誰でも助けることができます。





0 投票する
9 に答える
685 参照

c++ - ジャストインタイム導出

あまり一般的ではない C++ のイディオムがありますが、これは私が過去に何度か使用してうまくいきました。それを説明するために一般的に使用されている名前があるかどうかを思い出せないようです。

mixinsCRTP、およびtype-erasureに多少関連していますが、特にこれらのいずれかではありません。

クラスに実装を追加したいが、それをクラスまたはその派生元のクラスに配置したくない場合に、問題が発生します。この理由の 1 つは、クラスが継承階層の一部であり、実装が 1 回だけ発生する可能性があるためです。

とりあえず、階層に具体的な非リーフ クラスを含める必要があるかどうか、場合によっては仮想継承がオプションになるかどうかなどの問題はさておき、次から派生するテンプレート クラスで実装を提供する 1 つのソリューションを知っています。そのテンプレート パラメータ。これにより、インスタンスを作成するときにテンプレートを使用できますが、そのオブジェクトのベースの 1 つへのポインターまたは参照によってのみオブジェクトを使用できます (大まかな意味での型消去の出番です)。

例として、侵入的な参照カウントがある場合があります。すべてのクラスは ref カウント インターフェイスから派生しますが、ref カウント自体と ref カウント メソッドの実装を 1 回だけ表示する必要があるため、それらを派生テンプレートに入れます。それを呼び出しましょうImplementsRC<T>。これで、次のようにインスタンスを作成できます。

複数のテンプレート化されたオーバーロードなどで形成されたコンストラクターの転送などについて詳しく説明しています。

それで、イディオムが何であるかを明確にしたことを願っています。私の質問に戻ります - このイディオムに受け入れられている、または少なくとも一般的に使用されている名前はありますか?

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

scala - scala: 引数の型に応じたミックスイン

モデルのクラスのセットと、モデルで実行できるアルゴリズムのセットがあります。モデルのすべてのクラスがすべてのアルゴリズムを実行できるわけではありません。モデル クラスで、実行できるアルゴリズムを宣言できるようにしたいと考えています。モデルが実行できるアルゴリズムは、その引数に依存する場合があります。

例: 特性として表される 2 つのアルゴリズム MCMC と Importance があるとします。

モデル クラス Normal があります。これは、それ自体が Model である mean 引数を取ります。ここで、mean が MCMC を実装する場合、Normal に MCMC を実装する必要があり、mean が Importance を実装する場合、Normal に Importance を実装する必要があります。

私は次のように書くことができます:

適切な種類の法線が特定の手段で作成されるようにするファクトリ メソッドを作成できます。しかし明らかな疑問は、もし mean が MCMC と Importance の両方を実装しているとしたら? 次に、Normal にも両方を実装してもらいたいと思います。しかし、提案と転送を再実装する新しいクラスを作成したくありません。NormalMCMC と NormalImportance が引数を取らない場合は、それらをトレイトにして混合することもできます。しかし、ここでは、混合を引数の型に依存させたいと考えています。良い解決策はありますか?

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

c++ - 友達 mixin テンプレート?

Foo と Bar の 2 つのクラスがあり、Foo を変更せずに Foo を Bar と友達にしたいとしましょう。これが私の試みです:

プライベート関数を呼び出そうとするとコンパイラ エラーが発生するため、明らかに機能しませんでした。何か案は?