当前位置: 首页 > 知识库问答 >
问题:

如何在自定义类中实现map/flatmap

解阳泽
2023-03-14

我有一个名为 Expect 的类,在你实例化它之后,你可以构建一个数据结构(为了简单起见,假设它是一棵树)。然后调用 run 方法,该方法遍历树,在每个节点上执行一些操作。这些操作需要一些时间才能完成,以便将来返回最终结果。在伪代码中,它类似于:

class Expect[R](command: String) {
  //some methods to build the tree

  def run()(implicit ec: ExecutionContext): Future[R] = {
    //Traverse the tree and execute actions on the nodes that eventually return a R
  }
}

我想用它们通常的签名实现map和flatmap,但是它们作为参数接收的函数必须对将来返回的值进行操作。我看不出有任何方法可以实现这一点。

def map[T](f: R => T): Expect[T]
def flatMap[T](f: R => Expect[T]): Expect[T]

共有1个答案

周育
2023-03-14

以下类型使我想到了这一点:

import scala.concurrent.{ExecutionContext, Future}

abstract class Expect[R](command: String) { self => 
  //some methods to build the tree

  def run(implicit ec: ExecutionContext): Future[R]

  def map[T](f: R => T): Expect[T] = new Expect[T](command) {
    def run(implicit ec: ExecutionContext): Future[T] =
      self.run.map(f)
  }

  def flatMap[T](f: R => Expect[T]): Expect[T] = new Expect[T](command) {
    def run(implicit ec: ExecutionContext): Future[T] =
      self.run.flatMap(r => f(r).run)
  }
}

我认为< code>command可能不属于构造函数,它可能只需要被实际使用< code>command字符串的结构细化所封闭

 类似资料:
  • 问题内容: 我解析了.yaml文件,需要以自定义方式解组其属性之一。我正在使用包裹。 有问题的属性按如下方式存储在我的.yaml文件中: 因此,它基本上是一种类型。 但是我需要在哪里定义为: 我的结构: 我试图像这样实现Unmarshaler接口: 我的问题是在函数内部未定义类型,从而在运行时导致nil指针异常。 我如何在此处正确实现Unmarshaler接口? 问题答案: 由于@Volker并未

  • 我想创建我自己的地图减少工作。 map类的输出是:文本(键)、文本(值) reduce类的输出是:文本,不可扭曲 我试图通过以下方式实现它: 当我尝试运行它时,它会显示以下输出并终止 错误的课程从哪里来? 和 工作失败的原因 我不明白哪里出了问题。任何帮助

  • 本文向大家介绍Java如何实现自定义异常类,包括了Java如何实现自定义异常类的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自定义异常类步骤   创建一个类继承异常父类Exception   在具体的实现方法首部抛出异常类(自己创建的那个类),throws的

  • 本文向大家介绍如何在jQuery中实现自定义事件?,包括了如何在jQuery中实现自定义事件?的使用技巧和注意事项,需要的朋友参考一下 自定义事件意味着您可以在jQuery中创建自己的事件。例如,创建一个自定义事件以在按下键盘上的任意键时触发警报框。 示例 您可以尝试运行以下代码以了解如何创建自定义事件,

  • 问题内容: 我收到此错误: sum()得到了意外的关键字参数’out’ 当我运行此代码时: 除了对批处理进行循环并编辑源代码之外,是否可以实现自定义指标? 问题答案: 问题是,并没有与NumPy阵列但无论哪种Theano或TensorFlow张量。这就是为什么您会收到此错误。 您可以定义自定义指标,但必须记住,其参数是那些张量,而不是NumPy数组。

  • 我需要实现我的自定义DefaultComboxModel。这样做的原因是每次我打电话给 或者 或者 我看到它自动触发一个项目状态更改事件。这会导致一些随机项目自动从列表中选择。这不是我想要的,因为它用随机选择的项目填充可编辑的JTextField。 这是我在使用我的自定义Itemlistener中的Thread.dumpStack()进行调试时看到的stacktrace,它是我在调用上述方法时看到