要么我的语法错误,要么你不能使用with
to 应用于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 语句的构造来提取除名称之外的所有内容 - 甚至一个我必须把自己写成一个高阶函数?我已经考虑过,但我真的希望这仅适用于该块。 下面的答案告诉我高阶函数对此不起作用,但是有没有办法做到这一点?typealias
with
的单行实现with
是:
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
Run Code Online (Sandbox Code Playgroud)
是T.()
一个带有接收者的函数文字,接收者是一个对象。你正在通过一门课。
有关具有接收器的 Kotlin 函数文字的文档可以在此处找到。
归档时间: |
|
查看次数: |
591 次 |
最近记录: |