Kotlin 中的枚举和 With

sir*_*sel 2 enums kotlin

要么我的语法错误,要么你不能使用withto 应用于enum常量。IntelliJ 说这是因为RegexOption没有伴生对象,而RegexOption needs to be initialized here. 我不认为你可以实例化一个枚举。

// this works:
val RX_OPTIONS = mapOf(
  'c' to RegexOption.COMMENTS,
  'd' to RegexOption.DOT_MATCHES_ALL,
  'e' to RegexOption.CANON_EQ,
  'i' to RegexOption.IGNORE_CASE,
  'l' to RegexOption.LITERAL,
  'm' to RegexOption.MULTILINE,
  'u' to RegexOption.UNIX_LINES
)

// this doesn't work:
val RX_OPTIONS2 = with(RegexOption) { mapOf(
  'c' to COMMENTS,
  'd' to DOT_MATCHES_ALL,
  'e' to CANON_EQ,
  'i' to IGNORE_CASE,
  'l' to LITERAL,
  'm' to MULTILINE,
  'u' to UNIX_LINES
) }
Run Code Online (Sandbox Code Playgroud)

为什么第二个例子不起作用?如果它们不在伴生对象中,则它们似乎不会在实例中。有没有with可以在这种情况下工作的对应工具?如果没有,写一个容易吗(因为with只是一行)?

编辑(完善问题):

在一个块(甚至不一定是这个)中,我输入 20 个对相同长枚举名称的引用,例如Class.Inner.VeryInner.YouGetTheIdea.SOMEOPTION是否可以针对一个块SOMEOPTION使用类似 with 语句的构造来提取除名称之外的所有内容 - 甚至一个我必须把自己写成一个高阶函数?我已经考虑过,但我真的希望这仅适用于该块。 下面的答案告诉我高阶函数对此不起作用,但是有没有办法做到这一点?typealiaswith