我是很新的记录,并试图了解事情是如何运作的。在我的情况下,我想从这样的变体类型中访问一个密钥。
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.以下使用记录正在工作:
type personRecord = {
name: string,
age: int,
}
let personAsRecord = {name: "Bob", age: 30}
Js.log(personAsRecord.name)另一种选择是使用模式匹配,这也有效:
let personName = switch person {
| Person({name}) => name
}
Js.log(personName)所以我的问题是:这是因为类型是变体,而类型不是结构类型,不像类型记录那样?是使用模式匹配访问变体键的唯一方法吗?
发布于 2021-03-10 16:52:57
是访问变体键的唯一方法是使用模式匹配吗?
是。
尽管您也可以在let绑定中解构/模式匹配:
let Person({name}) = person和功能论证:
let print = (Person({name})) => Js.log(name)是因为类型是变体,类型不是结构类型,与类型记录不同吗?
我不太明白结构类型和它有什么关系。一个变体可以并且通常有多个不同有效载荷的“案例”,如果你不知道它们实际上在那里,你就无法安全地访问它们的属性。因此,您必须进行模式匹配以确定它是哪种情况,然后才能访问它的属性。
https://stackoverflow.com/questions/66568973
复制相似问题