带有嵌套记录的OCaml功能更新

带有嵌套记录的OCaml功能更新,ocaml,Ocaml,有没有可能使用ppx扩展或类似的方法,将函数更新语法{record with key=value}与嵌套记录一起使用 例如,在下面的示例程序中,我只在功能上更新最外层的记录,而实际上我想将目标锁定为“内部”记录 如果内部有多个字段,则不太方便 我希望能够编写如下内容(strawman语法): 您可以直接用OCaml编写: { item with b = { item.b with c = 0.8 } } 我假设您使用的是ignore,仅用于示例;忽略功能记录更新的结果是没有意义的。从某种意义上

有没有可能使用ppx扩展或类似的方法,将函数更新语法
{record with key=value}
与嵌套记录一起使用

例如,在下面的示例程序中,我只在功能上更新最外层的记录,而实际上我想将目标锁定为“内部”记录

如果
内部
有多个字段,则不太方便

我希望能够编写如下内容(strawman语法):


您可以直接用OCaml编写:

{ item with b = { item.b with c = 0.8 } }

我假设您使用的是
ignore
,仅用于示例;忽略功能记录更新的结果是没有意义的。

从某种意义上说,答案似乎是“否”。这听起来像是
{record with key=value}
中的
key
只能是一个字段,并且没有任何常用的扩展可以允许在
key
位置中有更多种类的内容。。。并且可能会将其分解成这样的多个功能更新。是的,直接OCaml的语法在
之后调用一个字段,并带有
。这是一个标识符,前面可能有包含模块的名称(其中定义了记录类型)。
let () = ignore { item with b.c = 0.8 }
{ item with b = { item.b with c = 0.8 } }