問題タブ [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.
rust - フィルター内で機能しないクロージャーを返す関数
クロージャーを使用しないと、これをコンパイルできません。apply
そもそも正しい種類のクロージャーを返す関数を取得しようとしています。
apply
自分のやりたいように仕事をするにはどうすればよいですか?
rust - VTable 内の各特性メソッドのオフセットを決定する方法はありますか?
ブロックを使わずに、特性オブジェクトをゼロから作成してみることができると思いました。impl
詳しく説明するには:
私が理解していることから、メンバー関数が特性定義に現れる順序は、関数ポインターが VTable に現れる順序と必ずしも同じではありません。VTable 内の各特性メソッドのオフセットを決定する方法はありますか?
generics - 構造体ではなく特性を介してパラメータ化された変数?
私は Rust のジェネリクスに頭を悩ませようとしています。さまざまな Web サイトから HTML を抽出するものを書いています。私が欲しいのは次のようなものです:
2 つの異なる型でパラメータ化された s をmatch
返すとエラーが発生します。それがパターン マッチの最初のアームの戻り値の型であるため、Spider
それが返されることを期待しています。Spider<GoogleParser>
spider
それが anyであることをどのように宣言できますかSpider<T: CanGetTitle>
?
rust - Rcオプションへ?
次のようなメソッドを実装しようとしています。
ただし、try_unwrap
トレイト オブジェクトでは機能しません (サイズが決まっていないため、これは理にかなっています)。Rc<Any>
次に考えたのは、直接アンラップする関数を見つけようとすることでしたBox<Any>
。私が見つけることができる最も近いものは
ただし、Rc::into_raw()
に含まれる型が である必要があるRc
ようで、理想的にはブロックSized
を使用する必要はありません。unsafe
これを実装する方法はありますか?
Playground Link、ここの実装を探していrc_to_box
ます。
rust - 特性とオブジェクトの安全性を理解する
オブジェクトの安全性の基本に苦労しています。このコードがあれば
私は受け取ります
: Sized
をスーパートレイトとして、または のバインドとして追加または削除すると、f
わずかに異なるエラー メッセージが表示されます。
誰かが説明できますか:
この特定の例が機能しないのはなぜですか? 特徴オブジェクトの章では、次のように述べています。
では、メソッドをオブジェクトセーフにするものは何ですか? 各メソッドは、
Self: Sized
満たされているのではないですか?
Trait: Sized
とはどう違いwhere Self: Sized
ますか?(そうですね、一方はトレイトを継承し、もう一方はパラメーター バインドですが、Rust のトレイト オブジェクトの観点からは?私が仕事をしなければならなかった好ましい変更は何
object_safety_dynamic
ですか?
気が向いrustc 1.19.0-nightly (01951a61a 2017-05-20)
たら使っています。
固定サイズに関するコメントへの対応。
rust - Rustで特性オブジェクトはどのように実装されていますか?
Rust で特性オブジェクトがどのように実装されているかを理解しようとしています。以下の理解が正しいかどうか教えてください。
Write
特性を実装する任意の型を取る関数があります:
このトレイトを実装し、上記の関数を呼び出す型がある場所では、コンパイラはおそらく への呼び出しを追加して、「トレイト オブジェクト」を生成しTraitObject::new(data, vtable)
ます。
次のようなものがある場合:
おそらく次のようになります。
コンパイラの内部では、渡さsome_func
れた vtable に基づいて使用されるメソッドにアクセスするだけです。TraitObject