問題タブ [generic-constraints]
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.
generics - ベクトル演算の F# 型の制約
ベクトルを操作するために、F# でジェネリック関数と型を書きたいと思います。(+)
静的演算子と演算子を使用した複数の異なるデータ型が(*)
あるため、それらを追加してスカラー (float
今のところ s ) で乗算できます。
たとえば、Vec2
私が書くことができるクラスを構築することに成功しました
Vec3
または他のタイプのベクトルも持っているとしましょう。以下は、私が書きたいものの 2 つの例 (疑似コード) です。
ベクトルの汎用関数
'V
これは、(+)
andをアサートする静的に解決された型制約で可能だと思いますが、(*)
機能させることはできません。次のように型制約に名前を付けることができればいいと思います。
実際に機能する代替手段はありますか?
それ自体がベクトル型であるジェネリック型
任意の型'T
および'V
ベクトルを表す型について、ベクトルの'T -> 'V
ような関数を追加およびスカラー乗算できます。のような型を作りたい
簡単な例として、両方のコンポーネントが に等しい を取り、を返すf : VecFunc<int,Vec2>
関数を格納できます。メソッドを呼び出すことで、基になる関数を評価できるかもしれません。int
x
Vec2
float x
Eval
VecFunc<int,Vec2>
ベクトル型として扱い、計算できるようにそれ(+)
と(*)
演算を与えたい
またはそれを最初の例と組み合わせる:
これらの結果を得るために F# インターフェイスまたは型パラメーターを使用する方法はありますか?
rust - 同等のジェネリックパラメータ制約を持つSwift拡張メソッドと同等のRust?
Swift では、パラメーター等価制約を使用してメソッドをジェネリック型に追加できます。
Rustでこれを行う方法は?
アップデート
この機能は、ジェネリック Where 句を使用した拡張機能と呼ばれます。
impl
これは基本的に Rust の明示的なトレイトのないwithwhere
句と同じ機能だと思います。
(明示的なトレイトなしで) と同等です
ということで、このRustコードで動くと思っていたのですが、エラーで動きません。( equality constraints are not yet supported in where clauses (see #20041)
)