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

rust - クロージャーで動的ディスパッチを使用して値が特性オブジェクトに変換されないのはなぜですか?

次のコードがあるとします。

コンパイラは次のように文句を言います:

しかし、それは次のように置き換えることで機能しseqます:

コードはここでテストできます。

唯一の違いは、失敗した例ではクロージャーが使用されているのに対し、他の例では (名前付き?) 関数が使用されていることですが、ロジックは同じです。それは一生の問題のように思えますが、それを理解することができませんでした. また、Option::map熱心に値を消費することになっている場合は、クロージャーをすぐに使用する必要があります。

クロージャーの例が失敗するのはなぜですか?

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

concurrency - Rust キャッシュ非同期トレイト

値が有効である限りキャッシュし、無効になったときに更新しようとすると、問題が発生します。この問題は、非同期実行間で状態を共有しようとしたことが原因であると考えています。さらに、このコンポーネントはマルチスレッド/並行環境に存在します。

修正方法がわからないというエラーが表示されます

以下は、一般的に私のユースケースと私が見ている問題を捉えた、私が思いつくことができる最小限の例です (所有権の問題もいくつかあります)。 これがコードの遊び場です。

これを例に含める方法がわかりませんでしたが、main複数のワーカースレッドが同時に/並行して実行され、各呼び出しCredsProvider.get_credsが実行され、これらのクレデンシャルを使用していくつかの作業が実行されると想像してください(完全な動作例にそれを追加できる場合、それは私の啓蒙のために非常に感謝しています)。AssumeMyCredsProvider.inner_get_credsはコストが高く、キャッシュされた資格情報の有効期限が切れたときにのみ呼び出す必要があります。

これを解決するにはどうすればよいですか?で十分だと思いましたArc<Mutex<>>が、そうではないようです。ある時点で、Credsand trait を作成できるようにしようとArc<Mutex<Option<Box<dyn Creds + Send + Sync>>>>しましたが、それは間違った道のように感じられ、うまくいきませんでした。

ありがとう。