scala – 解释这个模式匹配代码
这段代码是从
Querying a Dataset with Scala’s Pattern Matching:
object & { def unapply[A](a: A) = Some((a,a)) } "Julie" match { case Brothers(_) & Sisters(_) => "Julie has both brother(s) and sister(s)" case Siblings(_) => "Julie's siblings are all the same sex" case _ => "Julie has no siblings" } // => "Julie has both brother(s) and sister(s)" 如何&实际工作?我在任何地方看不到布尔测试。这个Scala魔术如何工作? 解决方法
以下是一般无法使用的方法:
当你做的 obj match {case Pattern(foo,bar) => ... } 调用Pattern.unapply(obj)。这可以返回None,在这种情况下,模式匹配是失败,或者Some(x,y),在这种情况下,foo和bar被绑定到x和y。 如果不是Pattern(foo,bar),那么你做了Pattern(OtherPattern,YetAnotherPatter),那么x将匹配模式OtherPattern,y将与YetAnotherPattern进行匹配。如果所有这些模式匹配都成功,则执行匹配的正文,否则尝试下一个模式。 当图案的名称不是字母数字,而是符号(如&)时,它使用的是中缀,即写入foo& bar代替&(foo,bar)。 所以这里&是一种总是返回一些(a,a)的模式,不管是什么。所以&总是匹配并将匹配的对象绑定到其两个操作数。在代码中,这意味着 obj match {case x & y => ...} 将始终匹配,x和y将与obj具有相同的值。 在上面的示例中,它用于将两个不同的模式应用于同一个对象。 即当你做的 obj match { case SomePattern & SomeOtherPattern => ...}` 首先是模式&被申请;被应用。正如我所说,它总是匹配并绑定到它的LHS及其RHS。那么SomePattern应用于&LHS(与obj相同),而SomeOtherPattern被应用于&RHS(也与obj相同)。 所以实际上,你刚刚应用了两个模式到同一个对象。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |