Enum和在Kotlin
无论我的语法是错误的,或者你不能用于应用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 ) }
为什么第二个例子没有工作? 如果他们不在伴侣对象中,那么他们似乎不会在一个实例中。 有没有可以在这种情况下工作的对口? 如果不是,写一个很容易(因为只是一个单行 )?
编辑(改进问题):
在一个块(不一定是这一个),我键入20引用相同的长枚举名称,如Class.Inner.VeryInner.YouGetTheIdea.SOMEOPTION
是有可能的因素除了SOMEOPTION
名称使用with-statement-就像是为了一个块而构建的 – 甚至是我必须把自己写成一个更高阶的函数呢? 我已经考虑过typealias
,但我真的希望这只适用于块。 下面的答案告诉我,高阶函数不适用于此,但有没有办法做到这一点?
with
的单线实现是:
public inline fun with(receiver: T, block: T.() -> R): R = receiver.block()
T.()
是一个带有接收者的函数 ,接收者是一个对象。 你正在上课。
Kotlin 函数文字与接收器的文档可以在这里find。