Bs.deriving 摘要 getter 函数 returns 使用大写名称时未定义
Bs.deriving Abstract getter function returns undefined when using capital names
在 bs.deriving 摘要的 bucklescript 文档示例中,您可以在使用 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
使用[bs.as] 为键名起别名。这显然不会更改 getter 的名称,在这种情况下它将保持 _NameGet
但值不再 returns 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
在 bs.deriving 摘要的 bucklescript 文档示例中,您可以在使用 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
使用[bs.as] 为键名起别名。这显然不会更改 getter 的名称,在这种情况下它将保持 _NameGet
但值不再 returns 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