問題タブ [trait-objects]
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.
types - すべての特性オブジェクトのデフォルトの特性メソッドの実装
私は trait を持っていて、すべての trait オブジェクトを互いに比較できるようにしMyTrait
たいのです。私は今、特性オブジェクト間の同等性をテストする方法に&MyTrait
基づいていますか? .
問題はMyTraitComparable
、代わりにどこでも使用する必要があることですMyTrait
。これを回避する方法はありますか?
デフォルトの実装に移動as_any
しequals
て提供しようとしましたが、MyTrait
self
その場合は使えないと思うのでダメです。- 使用する
trait MyTrait: PartialEq
と、特性オブジェクトを作成できなくなります。
rust - Vec を複製できません> 特性をオブジェクト化できないため
ボックス化された特性のベクターを複製しようとしています。当然のことながらClone
、私の特性を実装するすべての構造体を単に派生させるだけでは十分ではありません。なぜなら、コンパイラは、特性を実装するすべての構造体がClone
.
さて、それで私はClone
スーパートレイトとして使用しようとしましたが、それはタイトルのエラーにつながりました. 私は解決策に途方に暮れています。
これが最小限の実用的な実装です(または、複製できないため、機能していません)
このエラーで:
簡単にコードを実行できるプレイグラウンドへのリンクを次に示します。
elements
でベクトルを作成しようとしましSequence
たVec<Box<MusicElement + Clone>>
が、それもうまくいきませんでした。
オンラインで有用な解決策を見つけることができなかったので、ここに私の質問があります: コードを複製可能にするにはどうすればよいですか?
reference - アークを通過することは可能ですか> 型パラメータを使用せずに関数に?
Arc<RwLock<&Fn()>>
関数に aを渡す必要があります。
コンパイルが失敗し、次のエラー メッセージが表示されます。
閉鎖はありませんFn
か?
私が試してみました:
- を参照に置き換え
Arc<RwLock>
ます (結果は&&Fn()
)。これは、 の関数シグネチャでアンパサンドを 1 つ削除した場合にのみ機能しますがexecute()
、これはあまり役に立ちません。ここで説明したくない理由から、これらのラッパーが必要だからです。さびの遊び場 関数シグネチャの を where 句に移動し
Fn()
ます。execute()
それも機能しますが、where句も使用できません(構造体で必要になるためですが、構造体にはwhere句がないためです)。
- 前の 2 つのアイデアを組み合わせる:
Arc<RwLock<&&Fn()>>
関数シグネチャで a を渡し、アンパサンドを 1 つ削除します。それは私が必要とするものですが、それも失敗します。 wrapped_closure
へのキャスト(これは、ここArc<RwLock<&Fn()>>
で同様の問題に対する解決策でした)。これは「非プリミティブ キャスト」であるため失敗します。
Arc<RwLock<&Fn()>>
型パラメーターと where 句を追加せずに in Rustを渡すことは可能ですか? はいの場合、どのように?