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