smlnj将重载运算符,就像op +默认使用int一样,现在我希望它返回一个真实的函数* real - >真的,我怎么能以内联的方式做?
“内联方式”意味着不像绑定新的val:
fun add(x:real,y:real) = x + y;
如果我的记忆是正确的,有一些语法允许sml它只是做“铸”op +到真实的东西,但我无法在任何地方找到它..
答案 0 :(得分:2)
有多种方法可以让SML键入op+
作为真正的对应方。
取决于您拥有的代码,
您可以按照建议,键入注释周围的函数,从而强制op+
的参数为真实类型。
既然你没有修正加法函数(大概是用作高阶函数吗?),你也可以从真实模块Real.+
或者您可以这样注释:op+ : real * real -> real
,这真的很丑陋,考虑到您可以使用Real.+
。但这是一种选择。
答案 1 :(得分:0)
如果操作符的默认实例不是您的值类型所需的实例,则可以在操作数上使用类型注释来强制执行所需的输入。
例如,而
val f = fn a => a + a
将输入int -> int
,此值为
val g = fn a:real => a + a
将输入real -> real
。
答案 2 :(得分:0)
您可以声明
open Real
在您定义函数的范围内,但我强烈建议不要这样做。对函数进行类型注释是最好的方法。你不必注释每个参数,顺便说一句,它就足以做一个,或者在这种情况下,甚至是返回类型:
fun add(x : real, y) = x + y
fun add(x, y) : real = x + y