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

为什么scala Map没有实现unapply?

发布时间:2020-12-16 08:45:44 所属栏目:安全 来源:网络整理
导读:我在 scala中编写了以下用例: val wordShortcut = Map("volume" - "vol","report" - "rpt",...)object WordShortcutCase { def unapply(key: String): Option[String] = wordShortcut.get(key)}val pluralR = "(.+)s".rdef encodeToken(token: String) = to
我在 scala中编写了以下用例:

val wordShortcut = Map("volume" -> "vol","report" -> "rpt",...)

object WordShortcutCase {
  def unapply(key: String): Option[String] = wordShortcut.get(key)
}

val pluralR = "(.+)s".r

def encodeToken(token: String) = token match {
  case WordShortcutCase(short) => short
  case pluralR(singular) => singular
  case _ => token
}

如果scala Map实现unapply,我就不需要额外的WordShortcutCase对象(我可以使用caseShortcut(short)=> short而不是`).这对我来说似乎是一种常见的模式.

所以问题是为什么scala Map没有实现unapply方法?

解决方法

Map没有实现unapply,因为没有合理的实现具有与其他集合相同的特性.

特别是,你似乎想要申请和取消申请基本上做同样的事情.但这不是其他收藏品的运作方式;他们将变量绑定到内容并期望列表是详尽的(在没有绑定到“其余”的情况下):

val xs = List("fish")
val ys = List("fish","dish")
def iam(zs: List[String]) = zs match {
  case List(x) => println(s"I am a $x")
  case _       => println("Who am I??")
}
iam(xs)  // Prints 'I am a fish'
iam(ys)  // Prints 'Who am I??'

如果Map不是一个集合,那么可以自由地实现unapply作为另一种方式来进行应用,更像是regex(尽管在那里,注意关键特性是能够将多个变量绑定到正则表达式匹配的部分).但是既然如此,由于与其他集合的不同,具有类似正则表达式的unapply会非常混乱;并且因为地图是无序的并且unapplySeq是有序的,所以与其他集合具有相同的不适用性也会令人困惑.所以它没有一个.

(编辑:李大同)

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

    推荐文章
      热点阅读