加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 解释这个模式匹配代码

发布时间:2020-12-16 09:39:38 所属栏目:安全 来源:网络整理
导读:这段代码是从 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
这段代码是从 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相同)。

所以实际上,你刚刚应用了两个模式到同一个对象。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读