【问题标题】:scalaz trying to use Heap , how to override fold functionscalaz试图使用堆,如何覆盖折叠功能
【发布时间】:2016-12-18 23:44:43
【问题描述】:

我有一个案例类:case class Item(id: Long, rank: Int),我想创建一个 Item 对象堆。我尝试创建Heap[Item] 的实例,但我必须重写折叠函数,我不知道该怎么做,因此我被困在这一点上

val heap = new Heap[Item] {
      override def fold[B](empty: => B, nonempty: (Int, (Item, Item) => Boolean, Tree[Ranked[Item]]) => B): B = {

      }
    }

我必须做些什么才能使这项工作能够使用堆集合; 谢谢。

【问题讨论】:

  • 必须覆盖它但不知道你想让它做什么???
  • 我不知道 fold 是干什么用的,这是我第一次使用 scalaz 我什至找不到示例代码。
  • 那么不要使用 scalaz。你不需要它。如果您不知道函数是什么,请不要覆盖它们。

标签: scala scalaz


【解决方案1】:

你不应该直接打电话给new Heap

首先,为您的Items 定义一个隐式Order。例如按等级排序:

import scalaz._, Scalaz._

case class Item(id: Long, rank: Int)
object Item {
  implicit val order: Order[Item] = Order.orderBy(_.rank)
}

然后使用来自 Heap 伴随对象的辅助方法创建 Heaps:

Heap.Empty[Item]
Heap.singleton(Item(1L, 1))
Heap.fromData(List(Item(10L, 3), Item(20L, 2), Item(30L, 1)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多