構文が間違っているか、with
を使用してenum
の定数に適用できません。 IntelliJによると、RegexOption
にはコンパニオンオブジェクトがありません。それはです。私はあなたがenumをインスタンス化できるとは思わなかった。KotlinのEnums With With Kotlin
// 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
) }
2番目の例はなぜ機能しませんか。それらがコンパニオンオブジェクトにない場合、インスタンス内にあるようには見えません。 with
にはこのような状況で対応できるカウンターパートがありますか?そうでない場合は、with
はちょうどone-linerなので、書きやすいですか? (質問の絞り込み)
EDIT:ブロックで
(必ずしもでも、この1)私はのように同じ長い列挙名に20個の参照を入力していすることが可能です文のような構造を使ってSOMEOPTION
の名前を除外してください。ブロックにはちょうどです。上位の関数として書かなければならないものさえありますか?私はtypealias
と考えましたが、私は本当にこれをブロックにのみ適用したいと思います。 以下の答えは、with
高次関数はこれでは機能しませんが、それを行う方法はありますか?
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
T.()
が受信リテラル関数であり、受信機が対象である:
誤解を招くタグ「with-statement」を削除しました。 kotlinでは、それはステートメントではなく高次関数です。 –
特に、検索エンジンが「with」のような前置詞を優先順位をつけないことが多いため、Kotlin *が「with」ステートメントを持っているという誤った印象を受けた人がこの質問を見つけるのに役立つかもしれません。しかし、編集でうまくいく。 – sirksel