表示式中正規表示式匹配的習語
使用不可變的本地人:
使用較少的水平空間但比匿名臨時模板更多的垂直空間。如果 when
表示式在迴圈中,則優先於匿名臨時模板模板 - 在這種情況下,正規表示式定義應放在迴圈之外。
import kotlin.text.regex
var string = /* some string */
val regex1 = Regex( /* pattern */ )
val regex2 = Regex( /* pattern */ )
/* etc */
when {
regex1.matches(string) -> /* do stuff */
regex2.matches(string) -> /* do stuff */
/* etc */
}
使用匿名臨時工:
使用較少的垂直空間但比不可變的本地模板更多的水平空間。如果 when
表示式處於迴圈中,則不應該使用。
import kotlin.text.regex
var string = /* some string */
when {
Regex( /* pattern */ ).matches(string) -> /* do stuff */
Regex( /* pattern */ ).matches(string) -> /* do stuff */
/* etc */
}
使用訪客模式:
有利於密切模仿“argument-ful”when
語法。這是有益的,因為它更清楚地表明瞭 when
表示式的論證,並且還排除了由於必須在每個 whenEntry
中重複 when
引數而可能產生的某些程式設計師錯誤。immutable locals
或 anonymous temporaries
模板可以與此實現一起使用訪問者模式。
import kotlin.text.regex
var string = /* some string */
when (RegexWhenArgument(string)) {
Regex( /* pattern */ ) -> /* do stuff */
Regex( /* pattern */ ) -> /* do stuff */
/* etc */
}
並且 when
表示式引數的包裝類的最小定義:
class RegexWhenArgument (val whenArgument: CharSequence) {
operator fun equals(whenEntry: Regex) = whenEntry.matches(whenArgument)
override operator fun equals(whenEntry: Any?) = (whenArgument == whenEntry)
}