以下は、重複定義エラーを与える:多重ディスパッチ行動
let (.*) (m1 : Matrix<float>) (m2 : Matrix<float>) =
m1.Multiply(m2)
let (.*) (v1 : Vector<float>) (v2 : Vector<float>) =
v1.DotProduct(v2)
は、F#は、私は関数のシグネチャに基づいてコールにしようとしている機能を認識するような演算子オーバーロードを定義する方法はあります?
たとえばジュリアは、この非常に便利な機能を持っています
julia> methods(*)
# 138 methods for generic function "*":
*(x::Bool, y::Bool) at bool.jl:38
*{T<:Unsigned}(x::Bool, y::T<:Unsigned) at bool.jl:53
*(x::Bool, z::Complex{Bool}) at complex.jl:122
*(x::Bool, z::Complex{T<:Real}) at complex.jl:129
...
F#で似た何かを複製する方法があった場合、それは素晴らしいことです。おかげさまで
F#は広範な型推論を行い、関数/演算子のオーバーロードでうまく動作しません。インラインで、またはクラスに入れる必要があります。 – s952163
実際には、拡張メンバの演算子をオーバーロードできないようです... – s952163
[汎用パラメータ型を持つ関数]の可能な複製(http://stackoverflow.com/questions/501069/functions-with-generic-parameter-types) – Jwosty