我很难制定我正在尝试做的事情,但代码示例应该非常简单。如果有人知道更好的方式来表达它,你可以自由编辑标题。 :)
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
。这只是我编写的一个例子,其中添加了一些额外的方法,例如List
可能有用。
这有可能吗?或者是否有另一种方法更多 scala方式?我相信它可以用隐式转换(?)(它们对我来说仍然非常“神奇”),但这个用例似乎不必要地变脏了?
答案 0 :(得分:2)
您可以使用充实(pimp)我的库模式:
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 classes进行简化:
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
}