問題タブ [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 に答える
110 参照

rust - Vec と HashMap の間の Trait オブジェクトの不一致

次のコードがそのように動作する理由を理解するのに苦労しています( Playground ):

これはエラーをスローします:

私にとって奇妙なことは、エラーがのイテレータHashMapからではなく、からのリスト値のみを表示するという事実ほど正確なエラーではありません。Vec誰かが私に説明できますか:

  1. 2 つの構造体の反復子の動作が異なる理由
  2. マップから配列に値を渡す方法

get呼び出しを介して値を取得しても同じ現象が発生することがわかりました。

0 投票する
0 に答える
40 参照

rust - dyn FnMut をカスタム特性オブジェクトに変換するにはどうすればよいですか?

のようFnな特性は複数回実装できるため、これを行うことはできません。

このようなことをしたいので、特性を実装できる特性オブジェクトを使用してみました。

これは機能しますが、コールバック システム用にすべての種類を保存したいと考えてCallableいます。私の最初の最善の試みは a を使用するVec<Box<dyn Callable>>ことでしたが、特性オブジェクトを実装する特性の特性オブジェクトに変換できないようです。

これは私に与えます:

理解できない。特性オブジェクトは型です。私CallableはすべてのFn(T)特性オブジェクトに対して を実装しました。通常、特定の実装された特性オブジェクトから強制できます。

  • なぜ機能しないのですか?
  • 回避策はありますか?
  • Fn特性パラメーターの型が一般的で関連付けられていない理由はありますか?

サイドノート

パラメーターの数とタイプに関係なく、環境からパラメーターをフェッチできるクロージャー (関数だけでなく) を格納するために、この種のシステムが必要です。

自分ができるということがわかっている:

  • &Envユーザーが「抽出」を処理できるようにするクロージャーを許可します。
  • マクロを使用して、直接実装する独自のカスタム クロージャ タイプを作成しますCallable