問題タブ [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.

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

generics - ベクトル演算の F# 型の制約

ベクトルを操作するために、F# でジェネリック関数と型を書きたいと思います。(+)静的演算子と演算子を使用した複数の異なるデータ型が(*)あるため、それらを追加してスカラー (float今のところ s ) で乗算できます。

たとえば、Vec2私が書くことができるクラスを構築することに成功しました

Vec3または他のタイプのベクトルも持っているとしましょう。以下は、私が書きたいものの 2 つの例 (疑似コード) です。

ベクトルの汎用関数

'Vこれは、(+)andをアサートする静的に解決された型制約で可能だと思いますが、(*)機能させることはできません。次のように型制約に名前を付けることができればいいと思います。

実際に機能する代替手段はありますか?

それ自体がベクトル型であるジェネリック型

任意の型'Tおよび'Vベクトルを表す型について、ベクトルの'T -> 'Vような関数を追加およびスカラー乗算できます。のような型を作りたい

簡単な例として、両方のコンポーネントが に等しい を取り、を返すf : VecFunc<int,Vec2>関数を格納できます。メソッドを呼び出すことで、基になる関数を評価できるかもしれません。int xVec2float xEval

VecFunc<int,Vec2>ベクトル型として扱い、計算できるようにそれ(+)(*)演算を与えたい

またはそれを最初の例と組み合わせる:

これらの結果を得るために F# インターフェイスまたは型パラメーターを使用する方法はありますか?

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

rust - 同等のジェネリックパラメータ制約を持つSwift拡張メソッドと同等のRust?

Swift では、パラメーター等価制約を使用してメソッドをジェネリック型に追加できます。

Rustでこれを行う方法は?


アップデート

この機能は、ジェネリック Where 句を使用した拡張機能と呼ばれます。

implこれは基本的に Rust の明示的なトレイトのないwithwhere句と同じ機能だと思います。

(明示的なトレイトなしで) と同等です

ということで、このRustコードで動くと思っていたのですが、エラーで動きません。( equality constraints are not yet supported in where clauses (see #20041))