关于枚举使用中文标识符的不一致错误

先给一个能编译运行的例子, 后续在这个基础上进行修改:

enum 测试枚举 {
  None
  Some(String)
}

func to_string(self: 测试枚举) -> String {
  match self {
    测试枚举::None => "None"
    测试枚举::Some(t) => "Some(\(t))"
  }
}

func init {
  let a = 测试枚举::None
  let b = 测试枚举::Some("test")
  "\(a)\n".print()
  "\(b)\n".print()
}

运行输出:

None
Some(test)

修改 1

如果直接这样修改:

enum 测试枚举 {
  无
  有(String)
}

则编译错误:

[{
	"resource": "/sample-folder/001_hello.mbt",
	"owner": "_generated_diagnostic_collection_name_#0",
	"severity": 8,
	"message": "Parse error,unexpected token `identifier` , you may expect identifier or `}`",
	"startLineNumber": 2,
	"startColumn": 3,
	"endLineNumber": 2,
	"endColumn": 4
}]

修改 2

在语法里面说了, 枚举项必须以大写字母开头, 那么这样修改:

enum 测试枚举 {
  E无
  E有(String)
}

func to_string(self: 测试枚举) -> String {
  match self {
    测试枚举::E无 => "None"
    测试枚举::E有(t) => "Some(\(t))"
  }
}

那么第一个编译错误是:

[{
	"resource": "/sample-folder/001_hello.mbt",
	"owner": "_generated_diagnostic_collection_name_#0",
	"severity": 8,
	"message": "Parse error,unexpected token `identifier` , you may expect `(` or `=>` or `as`",
	"startLineNumber": 8,
	"startColumn": 12,
	"endLineNumber": 8,
	"endColumn": 13
}]

看起来这里是没问题的:

enum 测试枚举 {
  E无
  E有(String)
}

但是使用的时候就报错了:

  match self {
    测试枚举::E无 => "None"
1 个赞

希望可以改成: 如果枚举项的第一个字符不是英文字母, 就不必要求大写.

谢谢反馈,我们会在下个版本修复这个问题