我試圖定義一個重載的運算符,例如|+|
,如下:F#中重載的內聯運算符:(| + |)
let inline (|+|) (m1 : #IMeasurable) (m2 : #IMeasurable) = m1.Measure + m2.Measure
的問題是,我不能這樣做:由於運營商|+|
的情況下(m1 : int) (m2 : #IMeasurable)
沒有定義
let three = m1 |+| m2 |+| m3
。有沒有辦法重載這個操作符或使用靜態類型約束來使上述表達式成爲可能?有沒有辦法修改IMeasurable
(我可以編輯),以便這是可能的?還有什麼可以讓上述表達式起作用的東西?
謝謝。
返回一個'IMeasurable'沒有意義在這種情況下,我害怕。 – GregRos
嗯,如果返回'IMeasurabe'沒有邏輯意義,那麼你可能需要遵循@Gustavo的建議。雖然也許這意味着,具有簡單的函數,'IMeasurable'轉換爲'int',然後使用標準的'+'爲'int's將是一個很好的選擇。運營商定製是相當困難的,而發現像'm1.Measure + m2.Measure + m3.Measure'是不是太長,容易編寫和理解。 –