jimwei
1
Hi, All
在moonbit中如何定义其他语言中的枚举, 就是说, 枚举值可以有对应的赋值, 可能是数字, 字符串,如下
enum FnNum
{
Average = 1,
Count = 2
}
enum FnNum
{
Average = "aaa",
Count = "bbb"
}
或者说, 我只能定义常量, 如下
const FunctionNum_AVERAGE = 1
const FunctionNum_COUNT = 2
我想这样定义, 但是报错 “Cannot infer the type of variable Function_num, please add more type annotation.”
const Function_num = {
"AVERAGE": 1,
"COUNT": 2,
}
enum CStyleEnum {
Enum1
Enum2
Enum3
}
fn value(self : CStyleEnum) -> Int {
match self {
Enum1 => 10
Enum2 => 100
Enum3 => 78
}
}
fn main {
let e = Enum3
println(e.value())
}
jimwei
3
现在的问题是, 我在moonbit中写的函数中的参数希望是这个枚举类型, 但是这个函数是在其他地方调用, 比如在js中调用, 不可能传入moonbit中定义的枚举, 传入的是枚举对应的实际值, 比如1, 2. 所以,不知道该怎么做了
js没有enum的概念,需要自己做一个数字到enum的映射,例如:
enum CStyleEnum {
Enum1
Enum2
Enum3
}
fn to_int(self : CStyleEnum) -> Int {
match self {
Enum1 => 10
Enum2 => 100
Enum3 => 78
}
}
fn CStyleEnum::of(x : Int) -> CStyleEnum {
match x {
10 => Enum1
100 => Enum2
78 => Enum3
}
}
fn main {
let e = CStyleEnum::of(100)
println(e.to_int())
}
或者直接定义一系列常量:
const ENUM1 = 10
const ENUM2 = 100
const ENUM3 = 78