2013-02-17 34 views
0

smlnj會重載運算符,就像op +默認使用int一樣,現在我想要它返回一個真實的函數* real - > real,我該怎麼做inline方式?在smlnj中使用非默認的重載運算符smlnj

「內聯的方式」是指沒有像結合了新的VAL:如果我的記憶是正確的

fun add(x:real,y:real) = x + y; 

有一些語法允許SML它只是像做「演員」 OP +真實,但我無法在任何地方找到它。

回答

2

有多種方式可以讓SML輸入op+作爲真正的對應物。

取決於你有什麼都碼,

  • 您可以按照提示,輸入註釋周圍的功能,從而強制使用的參數op+是實數類型。

  • 既然你nonfixing加法函數(大概用作高階函數?),你也可以同樣沿着除了功能通過從實際模塊Real.+

  • 或者你可以註釋它像這個:op+ : real * real -> real,這真的很醜陋,考慮到你可以用Real.+來代替。但它是一種選擇。

0

如果運算符的默認實例不是您需要的值的類型,則可以在操作數上使用類型註釋來強制執行所需的輸入。

例如,雖然

val f = fn a => a + a 

將被輸入int -> int,該值

val g = fn a:real => a + a 

將鍵入real -> real

0

您可以在您定義的功能範圍申報

open Real 

,但我強烈反對這一點。鍵入註釋函數是最好的方法。你不必註釋每一個參數,順便說一句,這足以做一個,或在這種情況下,即使是返回類型:

fun add(x : real, y) = x + y 

fun add(x, y) : real = x + y