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? 

我不明白他们怎么是等价的,如果第一行不一个有效的功能。

+6

第一行'='的RHS中的变量'name1'没有定义。我认为这是〜name1的一个错字:name2。第一行应该让f〜name1:name1〜name2:name2 = name1 + name2 –

+1

它来自http://www.cs.cornell.edu/courses/cs3110/2015fa/l/02-fun/rec.html 。如果你有这门课程,你应该问TA修复它。 – camlspotter

+3

@TrungTa您应该将其作为答案发布,而不是评论。 – dcorking

syntax of function arguments允许不同的表达式。

鉴于计算结果为函数f表达式expr,下面的语法被允许的规则如下:

  • expr arg(给出的表达式arg):评价arg为一个值v;结果的f值与参数评价v

  • expr ~lbl(给定一个名为lbl):仅在f具有类型lbl:a -> b对于某些类型的ab,结果是f ~lbl与参数计算的值a; OR,当f的类型为?lbl:a -> b(然后,lbl必须具有用于类型检查的类型a)。

  • expr ~lbl:arg(给出的表达式arg):这是在同样的事情let lbl = arg in exp ~lbl(不同之处在于exprarg评价顺序是不确定的)。

  • expr ?lbl(给定一个名为lbl):仅在f具有类型?lbl:a -> b对于某些类型的ab,结果是f ~lbl与参数a计算的值; lbl必须有类型a option进行类型检查。这主要出现在将可选参数从一个函数转发到另一个函数时。

  • expr ?lbl:arg(给出的表达式arg):这是在同样的事情let lbl = arg in exp ?lbl(不同之处在于exprarg评价顺序是不确定的)。