これを読んでもunapply()、返品についてまだ疑問がありますBoolean。
Scala Programming Book (第 2 版) の 602 ページをご覧ください。例があります:
case Email(Twice(x @ UpperCase()), domain) => ...
UpperCase は、return を持ち、持たないオブジェクトとして定義されてunapply()いBooleanます。apply()
object UpperCase {
def unapply(s:String): Boolean = s.toUpperCase == s
}
このようなものはどこTwiceにありますか:
object Twice {
def apply(s:String): String = s + s
...
質問は次のとおりです(多すぎるに違いありません、申し訳ありません):
ここで UpperCase().unapply(..) はどのように機能しますか?
を渡すDIDI@hotmail.comと、x最初のコード snippet = 'DI'.. で '@' .. を使用して 'x' をバインドし、それを に渡してie (?)UpperCase.unapplyを呼び出します。unapply(x)unapply('DIDI')True
しかし、なぜOptionですか?unapply私はそれが戻ると思う傾向がありますOption..それがどのように機能するかのようなものです。これはおそらく、通常はOption一部のデータをラップするためですが、単純なケースでは、ブール値をラップするべきではありませんか? そして、apply() がないからですか?
Boolean/を使用する場合の違いは何Optionですか? この例に基づいています。
そして、この構文: x @ UpperCase()、特定の 1 つの内部で一致している場合、構文を置き換えることになっていvalue match caseますか (そのように読むと思いますか? case) これを行う統一された方法/構文とは思えません。
通常、次のような構文 (x,y が Int であると仮定):case AA(x @ myX, y) => println("myX: " + myX)は、xにバインドすることを示します。この場合myX、基本的にmyXは .. のエイリアスです。xしかし、私たちの場合 - x @ UpperCase(). .. にxバインドし、パラメーターとして配置します。つまり、ここでのバインドは非常に抽象的/幅広い概念です..UpperCase().unapply()x