pattern-matching - 从单个 switch 语句返回各种类型的 ReasonML 方法
问题描述
我有预定义的类型,
type objA = {name: string}
type objB = {age: int}
我想要一个变体类型,
type test =
| Atype(objA)
| Btype(objB)
并最终使用模式匹配来正确返回每种类型所包含的值。
let testVariant = {name: "helloworld"}
switch(testVariant: test){
| Atype(v) => v
| Btype(v) => v
}
但是由于 Atype 和 Btype 内部的变量值不同,这是不可能的。我的问题是,如何使用模式匹配有条件地返回一些不同类型的数据。
解决方案
您可以通过使用 GADT 来实现这一点(为了更好地理解,请阅读此Sketch)。
type objA = {name: string};
type objB = {age: int};
type test('a) =
| Atype(objA): test(string)
| Btype(objB): test(int);
let testVariant: type a. test(a) => a = {
fun
| Atype(v) => v.name
| Btype(v) => v.age
};
推荐阅读
- javascript - 无法修改已提交 FireStore 的 WriteBatch
- c# - 节点的 XML 代码更改值 - 显示的代码如何正确?
- sql - 使用 UNION 合并和融合两个 SQL 查询的结果
- angular - Angular ng 探针:获取对用于注入器的令牌的引用
- chromecast - Chromecast CAF3 支持 TTML+PNG
- underscore.js - 下划线中 groupBy 的 lodash 等价物
- java - 服务器进入无限循环并给出 GOOGLE_APPLICATION_CREDENTIALS 异常
- python - 将预言家预测反馈到数据集 - Python
- visual-studio-extensions - VS 2019 扩展以在项目加载时运行资源生成器
- java - Android & Java:String.getBytes() 无法正确解析转义字符