エクストラクタが を返すときに、変数を @ スタイルでバインドできないのはなぜOption[<Type>]
ですか? つまり、これは機能しません:
object IsUpperCase {
def unapply(s: String): Option[String] = {
if (s.toUpperCase() == s) {
Some(s)
} else {
None
}
}
}
val s = "DuDu@qwadasd.ru"
s match {
case u @ IsUpperCase() => println("gotcha!") // what? "wrong number of arguments for object IsUpperCase"?
case _ =>
}
しかし、これは機能します!
val s = "DuDu@qwadasd.ru"
s match {
case IsUpperCase(u) => println("gotcha!")
case _ =>
}
一方、次のようにIsUpperCase
見える場合:
object IsUpperCase {
def unapply(s: String): Boolean = {
return s.toUpperCase() == s
}
}
次に、最初の例は機能しますが、2 番目の例は機能しません! なぜこのようになっているのですか?