2
下面給出的重複定義錯誤:多分派行爲重載
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