ocaml - Bs.deriving Abstract getter 函数在使用大写名称时返回 undefined
问题描述
在 bs.deriving abstract 的 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);
如果您将其更改为大写 name 键,如下所示,您生成的 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] 为密钥的名称命名。这显然不会更改在这种情况下仍将保留_NameGet
但值不再返回未定义的 getter 的名称。
[@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
文档:重命名字段
推荐阅读
- azure - 如何通过 Azure DevOps 在 Dockerfile 中设置环境变量
- angular - 在 Angular Google Charts 中将散点图系列添加到烛台图
- android - 通过 Intent 链接到主屏幕小部件选择器
- generics - 与 C# 8.0 可空引用类型结合时,是否可以为值或字符串类型声明泛型类型约束?
- c# - 是否可以在不破解的情况下强制编译 DynamicMethod ?
- python - 检测两张图片之间的变化
- php - WordPress 固定链接结构,用于查找带有标签的产品
- mqtt - EMQX 配置允许匿名内部连接
- kubernetes - 在 Ansible 中,如何读取本地系统中的 configMap 文件并将其从远程节点中删除?
- ocaml - Ocaml / ReasonML - 内置可执行文件中缺少库