F#:(+)的类型是什么?

3

我是F#的新手。我试图找到一些值的类型,比如(+)、pown等。 虽然我模糊地理解(int -> int -> int)表示“一个接受整数并返回一个接受整数并返回整数的函数”。

但是,我不明白<fun:it@1>的含义。

(+);;  
val it : (int -> int -> int) = <fun:it@1>

希望您能帮助理解这个概念。


请看这里 - Jeroen Heier
1个回答

4
我猜你正在使用F#交互(fsi)来评估表达式。在这种情况下,这是你应该阅读程序输出的方式:
  • val it => 表示绑定到最后一个评估表达式
  • : (int -> int -> int) => 冒号后面是最后一个评估表达式的类型
  • = <fun:it@1> => 等号后面是最后一个评估表达式的值
所以你可以看到你已经回答了你关于( + )类型的问题。你正在询问的部分只是函数的值,而fsi无法显示任何有意义的内容。如果你尝试定义自己的函数,你将得到类似的结果:let f x = x + 1;; f;;产生val it : (int -> int) = <fun:it@4>
现在,为了完全回答关于( + )的类型的问题,这有点棘手,因为它是一个重载运算符,需要更高级的知识来理解。基本上,如果存在一个名为( + )的静态成员类,其中输入类型为^T1^T2,那么您可以在类型为^T1^T2的值上使用( + )运算符。

2
这是关于 (+) 这个棘手类型的解释:https://dev59.com/qIXca4cB1Zd3GeqPKZaL - Gus
谢谢您的解释。由于我来自命令式编程背景,我倾向于将概念与C / C ++等相当的语言进行关联和比较。这些语言允许将函数指针作为回调参数传递。我不太确定,但是在F#中,函数值是否可以被认为是类似于C / C ++的函数指针... - Yelena
1
我想把这个比喻拿来用也无妨,但实际上函数值是作为 FSharpFunc 类的实例 传递的。 - user9895453

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接