ocaml中的{X带值}
我看到了以下函数调用: 我可以看到一个函数调用,第一个参数是record initialized,第二个参数是ocaml中的{X带值},ocaml,Ocaml,我看到了以下函数调用: 我可以看到一个函数调用,第一个参数是record initialized,第二个参数是ast 我不熟悉的是表单的语法: {Visitor_c.default_visitor_c with Visitor_c.kexpr = some_value;} 这意味着什么?我知道记录可以像{name=value;name=value;…}那样初始化,但我不熟悉{X with name=value},你能告诉我它的意思吗 除了以下内容外,我在“无关于合法记录值初始化的内容”中找不到
ast
我不熟悉的是表单的语法:
{Visitor_c.default_visitor_c with Visitor_c.kexpr = some_value;}
这意味着什么?我知道记录可以像{name=value;name=value;…}
那样初始化,但我不熟悉{X with name=value}
,你能告诉我它的意思吗
除了以下内容外,我在“无关于合法记录值初始化的内容”中找不到其他内容:
6.2.3记录
记录值标记为的元组
价值观写入的记录值{
field1=v1;…;fieldn=vn}
将值vi与记录相关联
字段i,对于i=1…n。这个
当前的实现支持
高达222条的记录− 1字段
(4194303个字段)
如果您能在回答中引用OCaml手册中的相关章节,我将非常高兴。这有时被称为“记录更新”或“功能更新”之类的内容。它计算为与X类型相同的新记录,其字段初始化为与X中的字段相同的字段,但“with”后面列出的字段初始化为给定值 它对于不可变记录很有用,可以方便地获取这样的记录并更改其中的一个或两个内容(在命令式语言中,您通常会更改字段),而不必列出所有未更改的字段 OCaml手册中有描述,向下滚动至“记录”,第二段 对于熟悉Haskell的人来说,OCaml语法
{ expr with field1 = expr1 ; ... ; fieldn = exprn }
与Haskell语法相同
expr { field1 = expr1 , ... , fieldn = exprn }
要更正以前的答复,新记录的类型并不总是与旧记录的类型相同。 例如,您可以有如下内容:
type 'a t = {
id : int;
value : 'a;
}
let old_t = { id = 3; value = "foo" }
let new_t = { old_t with value = 3 }
因此,
old\u t
的类型为string t
,而new\u t
的类型为int t
,谢谢。我怎么能用谷歌搜索呢?这本手册很深,我很难找到。我不知道你怎么用谷歌搜索它。我只是碰巧知道这个。但在该页面的顶部(第6.7节)列出了OCaml中所有有效表达式的语法,因此,如果您想理解一个表达式,可以先从那里开始,如果您看到它,请向下滚动到描述它的相应部分。总的来说,第6章讨论了OCaml语言语法的各个方面;这里有关于类型表达式、模式、类、模块等的部分。因此,如果您需要查找任何内容,我将首先从相应的部分开始。哇,我不知道您可以继续列出fieldn=expern代码>。谢谢
type 'a t = {
id : int;
value : 'a;
}
let old_t = { id = 3; value = "foo" }
let new_t = { old_t with value = 3 }