enum的困惑

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())
}

现在的问题是, 我在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

学习了, 非常感谢~~~ :coffee: