读到这里unapply()
,我仍然对那个回报有疑问Boolean
。
如果看看Scala Programming Book (2nd edition), page 602。有一个例子:
case Email(Twice(x @ UpperCase()), domain) => ...
其中 UpperCase 定义为有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
在第一个代码片段 = 'DI'.. 然后我们使用 '@' ..绑定 'x' 将其传递UpperCase.unapply
给调用unapply(x)
ie unapply('DIDI')
(?) 然后它返回True
。
但为什么不Option
呢?我倾向于认为这会unapply
返回Option
......它是如何工作的一种方式。这可能是因为通常Option
包装一些数据,但对于简单的情况,我们不应该包装布尔值?因为我们没有 apply()?
有什么区别,什么时候使用Boolean
/ Option
?基于这个例子。
而这个语法:x @ UpperCase()
,如果我们在一个特定的内部匹配,它是否应该替换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
作为参数。我的意思是这里的绑定是非常抽象/广泛的概念..