使用大写名称时,BS.deriving抽象getter函数返回未定义

时间:2019-01-24 17:47:07

标签: ocaml reason bucklescript

在bs.deriving抽象的扣脚本文档示例中,您可以使用nameGet()

获取所创建对象的属性。

这有效:

@bs.deriving abstract]
type person = {
  name: string,
  age: int,
  job: string,
};
let joe = person(~name="Joe", ~age=20, ~job="teacher");
let name = nameGet(joe);

如果您将其更改为大写名称键(如下所示),则生成的getter将变为_NameGet()

type person = {
  _Name: string,
  age: int,
  job: string,
};
let joe = person(~_Name="Joe", ~age=20, ~job="teacher");
let name = _NameGet(joe);

在第二个示例中,名称值返回未定义。如何解决? repl中的示例:tryreason

1 个答案:

答案 0 :(得分:0)

使用[bs.as]作为键名的别名。显然,这不会更改将保留为_NameGet的getter的名称,但该值不再返回undefined。

[@bs.deriving abstract]
type person2 = {
  [@bs.as "Name"]
  _Name: string,
  age: int,
  job: string,
};

let john = person2(~_Name="John", ~age=20, ~job="teacher")
let namejohn = _NameGet(john);
Js.log(namejohn);

输出:John

docs:renaming fields