問題タブ [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.

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

rust - オプションに特性オブジェクトへの参照を入れる方法は?

io::Write構造体の内部に特性オブジェクトへの参照を保存したいのですが、Option方法がわかりません。次のように直接参照を入れることができます。

次に、(たとえば)次のBufWriterように割り当てます。

これは機能しますが、オプションにしたいと思いlogstreamます。私が試してみると:

私は得る:

ここで適切なアプローチは何ですか?

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

casting - Rc 特性オブジェクトを複製して別の特性オブジェクトにキャストするにはどうすればよいですか?

これは、さまざまな taits 間の Rust 動的キャスト トレイト オブジェクトからのフォローアップの質問です。Rcそこで提供されたソリューションは、特性オブジェクトの参照を使用する場合に非常にうまく機能しますが、今回はポインターで同じことをしようとしています。例えば

  • という名前のスーパー トレイトと、and という名前TraitABの 2 つのトレイトがTraitAあります。TraitB
  • TraitABそのため、を使用する代わりに型の特性オブジェクトを最初に作成するときは、ポインターBoxを使用するようになりました。Rc
  • TraitA参照するタイプの変数が必要ですab

ここで私は非常に最小限の例を作りました:

しかし、これはうまくいきません。エラーメッセージによると:

as_aas_bself が実際にはRcポインタであることを知ることはできません。複製された共有ポインタのキャストを行う方法はありますか?

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

generics - &(?Sized + Trait) を &dyn Trait にキャストできないのはなぜですか?

以下のコードでは、同じ特性を実装する動的サイズの型への参照から特性オブジェクトへの参照を取得することはできません。これはなぜですか?&dyn Trait&(?Sized + Trait)両方を使用してトレイト メソッドを呼び出すことができる場合の違いは何ですか?

実装する型は、FooTraitContainerTraitたとえば havetype Contained = dyn FooTraitまたはtype Contained = Twhere Tis を実装する具体的な型である可能性がありますFooTrait。どちらの場合も、 を取得するのは簡単&dyn FooTraitです。これが機能しない別のケースは考えられません。の一般的なケースでこれが可能でないのはなぜFooTraitContainerTraitですか?

行のコメントを外すfoo_dyn(some_foo)と、コンパイラ エラーが発生する

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

rust - 特性オブジェクトまたはサイズのない型のタプルを反復処理する方法

この質問は、最初は reddit のこの投稿で見つかりました。

経験豊富な Rust ユーザーは、タプル内の要素が同じである必要がないことに気付くでしょう (同じ場合は、配列を使用する必要があります!)。そのため、それらを繰り返し処理しても意味がありません。便利です。

これらのケースは、タプルの型を同じサイズのない型 ([u8]または などdyn Trait) にキャストできる場合です。

デモストレーション:

上記の美しい書き方が見つかりませんでした。何か案が?


十分に美しくない可能性のある答えを確認するには、次のようにします。

プレイグラウンドリンク