問題タブ [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 投票する
1 に答える
2941 参照

rust - フィルター内で機能しないクロージャーを返す関数

クロージャーを使用しないと、これをコンパイルできません。applyそもそも正しい種類のクロージャーを返す関数を取得しようとしています。

apply自分のやりたいように仕事をするにはどうすればよいですか?

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

rust - VTable 内の各特性メソッドのオフセットを決定する方法はありますか?

ブロックを使わずに、特性オブジェクトをゼロから作成してみることができると思いました。impl詳しく説明するには:

私が理解していることから、メンバー関数が特性定義に現れる順序は、関数ポインターが VTable に現れる順序と必ずしも同じではありません。VTable 内の各特性メソッドのオフセットを決定する方法はありますか?

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

generics - 構造体ではなく特性を介してパラメータ化された変数?

私は Rust のジェネリクスに頭を悩ませようとしています。さまざまな Web サイトから HTML を抽出するものを書いています。私が欲しいのは次のようなものです:

2 つの異なる型でパラメータ化された s をmatch返すとエラーが発生します。それがパターン マッチの最初のアームの戻り値の型であるため、Spiderそれが返されることを期待しています。Spider<GoogleParser>

spiderそれが anyであることをどのように宣言できますかSpider<T: CanGetTitle>?

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

rust - Rcオプションへ?

次のようなメソッドを実装しようとしています。

ただし、try_unwrapトレイト オブジェクトでは機能しません (サイズが決まっていないため、これは理にかなっています)。Rc<Any>次に考えたのは、直接アンラップする関数を見つけようとすることでしたBox<Any>。私が見つけることができる最も近いものは

ただし、Rc::into_raw()に含まれる型が である必要があるRcようで、理想的にはブロックSizedを使用する必要はありません。unsafe

これを実装する方法はありますか?

Playground Link、ここの実装を探していrc_to_boxます。

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

rust - 特性とオブジェクトの安全性を理解する

オブジェクトの安全性の基本に苦労しています。このコードがあれば

私は受け取ります

: Sizedをスーパートレイトとして、または のバインドとして追加または削除すると、fわずかに異なるエラー メッセージが表示されます。

誰かが説明できますか:

  • この特定の例が機能しないのはなぜですか? 特徴オブジェクトの章では、次のように述べています。

    では、メソッドをオブジェクトセーフにするものは何ですか? 各メソッドは、Self: Sized

    満たされているのではないですか?

  • Trait: Sizedとはどう違いwhere Self: Sizedますか?(そうですね、一方はトレイトを継承し、もう一方はパラメーター バインドですが、Rust のトレイト オブジェクトの観点からは?

  • 私が仕事をしなければならなかった好ましい変更は何object_safety_dynamicですか?

気が向いrustc 1.19.0-nightly (01951a61a 2017-05-20)たら使っています。

固定サイズに関するコメントへの対応。

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

rust - Rustで特性オブジェクトはどのように実装されていますか?

Rust で特性オブジェクトがどのように実装されているかを理解しようとしています。以下の理解が正しいかどうか教えてください。

Write特性を実装する任意の型を取る関数があります:

このトレイトを実装し、上記の関数を呼び出す型がある場所では、コンパイラはおそらく への呼び出しを追加して、「トレイト オブジェクト」を生成しTraitObject::new(data, vtable)ます。

次のようなものがある場合:

おそらく次のようになります。

コンパイラの内部では、渡さsome_funcれた vtable に基づいて使用されるメソッドにアクセスするだけです。TraitObject