【发布时间】:2015-10-02 15:00:59
【问题描述】:
在 Scala 中“滥用”模式匹配的 unapply 方法是一种好的风格吗?我想做的是将一个对象与另一个对象进行匹配,然后构造另一个对象。由于我是 Scala 的新手,我最终得到了以下解决方案。但是像这样使用 unapply 方法似乎并不正确,因为它的目的是作为提取器。有人可以给我反馈吗?
object Poker {
def unapply(hand: Hand): Option[Poker] = if(hand.countValueGroups().exists(_._2 == 4)) Some(new Poker(hand)) else None
}
val h = Hand("AC As AH Ad 2h")
h match {
case Poker(han) => println("POKER!!!"+han)
case _ => println("?????")
}
【问题讨论】:
-
如果这是不好的做法,那我就完蛋了 ;) 虽然在 scala 2.11 中使用name based extractor 可以提高效率
-
unapply除了模式匹配还有什么用处? -
感谢您的反馈,我会研究基于名称的提取器。
-
我问的原因是因为教程让extracors的主要目的看起来像是返回给定对象的状态。但话说回来,Scala 教程并不是我见过的最好的:P
标签: scala