Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml 带有可选和可变字段的记录_Ocaml_Ffi_Bucklescript - Fatal编程技术网

Ocaml 带有可选和可变字段的记录

Ocaml 带有可选和可变字段的记录,ocaml,ffi,bucklescript,Ocaml,Ffi,Bucklescript,在文档中:有具有可变字段和可选字段的记录的示例。当我尝试使用这两种方法时,它都失败了: 汇编: type person = { mutable age: int; job: string; } [@@bs.deriving abstract] let joe = person ~age:20 ~job:"teacher" let () = ageSet joe 21 添加[@bs.optional]属性: type person = { mutable age: int; j

在文档中:有具有可变字段和可选字段的记录的示例。当我尝试使用这两种方法时,它都失败了:

汇编:

type person = {
  mutable age: int;
  job: string;
} [@@bs.deriving abstract]

let joe = person ~age:20 ~job:"teacher"
let () = ageSet joe 21
添加
[@bs.optional]
属性:

type person = {
  mutable age: int;
  job: string [@bs.optional];
} [@@bs.deriving abstract]

let joe = person ~age:20 ~job:"teacher"
let () = ageSet joe 21
错误消息:

第7行,第20行: 此表达式的类型为unit->person 但应为person类型的表达式

第7行是
年龄集

我在这里遗漏了什么吗?

我重新阅读了,这是我遗漏的部分

注意:既然您的创建函数包含可选字段,那么我们在末尾强制使用unlabeled()来表示您已经完成了该函数的应用


Ocaml函数要求最后一个参数始终是非可选的。所以,当你有一个不是这样的函数时,一般的解决方案是添加一个伪单位参数。bs.optional别无选择,只能在这里这样做。
type person = {
  mutable age: int;
  job: string [@bs.optional];
} [@@bs.deriving abstract]

let joe = person ~age:20 ~job:"teacher" ()
let () = ageSet joe 21