これを読んでも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