从单个 switch 语句返回各种类型的 ReasonML 方式
ReasonML way of returning various types from a single switch statement
我有预定义的类型,
type objA = {name: string}
type objB = {age: int}
我想要一个变体类型,
type test =
| Atype(objA)
| Btype(objB)
并最终使用模式匹配来正确return每种类型所包含的值。
let testVariant = {name: "helloworld"}
switch(testVariant: test){
| Atype(v) => v
| Btype(v) => v
}
但是由于Atype和Btype里面的变量值不同,所以这是不可能的。我的问题是,如何使用模式匹配有条件地 return 一些不同类型的数据。
您可以使用 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
};
我有预定义的类型,
type objA = {name: string}
type objB = {age: int}
我想要一个变体类型,
type test =
| Atype(objA)
| Btype(objB)
并最终使用模式匹配来正确return每种类型所包含的值。
let testVariant = {name: "helloworld"}
switch(testVariant: test){
| Atype(v) => v
| Btype(v) => v
}
但是由于Atype和Btype里面的变量值不同,所以这是不可能的。我的问题是,如何使用模式匹配有条件地 return 一些不同类型的数据。
您可以使用 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
};