1

可能重复:
scala:向列表添加方法?

我很难制定我想要做的事情,但代码示例应该非常简单。如果有人知道更好的表达方式,您可以自由编辑标题。:)

trait DiceThrow {
  list: List[Int] =>   // something like this??
  def yatzee = list.filter(_ == list.head).length >= 5
}

object Main extends App {
  val aThrow = List(4,4,4,4,4) with DiceThrow
  aThrow.yatzee  // => true    is what I want
}

所以我希望aThrow: List[Int]有一些额外的方法,比如知道它是否是yatzee。这只是我编造的一个例子,在其中添加一些额外的方法到例如 aList可能是有用的。

这有可能吗?还是有另一种更像scala方式的方法?我相信隐式转换是可能的(?)(它们对我来说仍然很“神奇”),但这似乎不必要地弄脏了这个用例?

4

1 回答 1

3

您可以使用丰富(皮条客)我的图书馆模式:

class DiceList(list: List[Int]) {
  def yatzee = list.filter(_ == list.head).length >= 5
}

implicit def list2DiceList(list: List[Int]) = new DiceList(list)

在 scala 2.10 中,可以使用隐式类对其进行简化:

implicit class DiceList(list: List[Int]) {
  def yatzee = list.filter(_ == list.head).length >= 5
}

然后你可以像这样使用它:

object Main extends App {
  val aThrow = List(4,4,4,4,4)
  aThrow.yatzee  // => true
}
于 2012-12-13T14:54:05.657 回答