首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从rescript中的变体类型访问密钥

从rescript中的变体类型访问密钥
EN

Stack Overflow用户
提问于 2021-03-10 16:29:58
回答 1查看 187关注 0票数 0

我是很新的记录,并试图了解事情是如何运作的。在我的情况下,我想从这样的变体类型中访问一个密钥。

代码语言:javascript
复制
type personType = Person({name: string, age: int})
let person = Person({
  name: "Jane",
  age: 35,
}) 
Js.log(person.name) // -> Error: The record field name can't be found.

以下使用记录正在工作:

代码语言:javascript
复制
type personRecord = {
  name: string,
  age: int,
}
let personAsRecord = {name: "Bob", age: 30}
Js.log(personAsRecord.name)

另一种选择是使用模式匹配,这也有效:

代码语言:javascript
复制
let personName = switch person {
| Person({name}) => name
}
Js.log(personName)

所以我的问题是:这是因为类型是变体,而类型不是结构类型,不像类型记录那样?是使用模式匹配访问变体键的唯一方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-10 16:52:57

是访问变体键的唯一方法是使用模式匹配吗?

是。

尽管您也可以在let绑定中解构/模式匹配:

代码语言:javascript
复制
let Person({name}) = person

和功能论证:

代码语言:javascript
复制
let print = (Person({name})) => Js.log(name)

是因为类型是变体,类型不是结构类型,与类型记录不同吗?

我不太明白结构类型和它有什么关系。一个变体可以并且通常有多个不同有效载荷的“案例”,如果你不知道它们实际上在那里,你就无法安全地访问它们的属性。因此,您必须进行模式匹配以确定它是哪种情况,然后才能访问它的属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66568973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档