OCaml的参数名
问题描述:
从阅读:OCaml的参数名
标签的参数往往是相同 他们的变量名。 OCaml提供了这种情况的简写。以下是 相当于:
let f ~name1:name2 ~name2:name2 = name1+name2 let f ~name1 ~name2 = name1 + name2
当我把在第一线我得到这个错误
Error: Unbound value name1
Hint: Did you mean name2?
我不明白他们怎么是等价的,如果第一行不一个有效的功能。
答
syntax of function arguments允许不同的表达式。
鉴于计算结果为函数f
表达式expr
,下面的语法被允许的规则如下:
expr arg
(给出的表达式arg
):评价arg
为一个值v
;结果的f
值与参数评价v
expr ~lbl
(给定一个名为lbl
值):仅在f
具有类型lbl:a -> b
对于某些类型的a
和b
,结果是f ~lbl
与参数计算的值a
; OR,当f
的类型为?lbl:a -> b
(然后,lbl
必须具有用于类型检查的类型a
)。expr ~lbl:arg
(给出的表达式arg
):这是在同样的事情let lbl = arg in exp ~lbl
(不同之处在于expr
和arg
评价顺序是不确定的)。expr ?lbl
(给定一个名为lbl
值):仅在f
具有类型?lbl:a -> b
对于某些类型的a
和b
,结果是f ~lbl
与参数a
计算的值;lbl
必须有类型a option
进行类型检查。这主要出现在将可选参数从一个函数转发到另一个函数时。expr ?lbl:arg
(给出的表达式arg
):这是在同样的事情let lbl = arg in exp ?lbl
(不同之处在于expr
和arg
评价顺序是不确定的)。
第一行'='的RHS中的变量'name1'没有定义。我认为这是〜name1的一个错字:name2。第一行应该让f〜name1:name1〜name2:name2 = name1 + name2 –
它来自http://www.cs.cornell.edu/courses/cs3110/2015fa/l/02-fun/rec.html 。如果你有这门课程,你应该问TA修复它。 – camlspotter
@TrungTa您应该将其作为答案发布,而不是评论。 – dcorking