scala之尾递归和 scalaz promises

soundcode 阅读:16 2024-11-24 20:56:43 评论:0

我目前正在使用 Scalaz 非阻塞 future 。 promise 。我正在努力使以下函数尾递归:

@tailrec 
private def repeat( res: Promise[I] ):Promise[I] = 
  res map p flatMap {  
    (b:Boolean) => 
      if( b ) repeat( res flatMap f ) else res 
  } 

其中 p 是类型为 I=>Boolean 的谓词,f 是类型为 输入 I=>Promise[I]

该方法在没有注释的情况下编译。

有什么提示吗?谢谢

请您参考如下方法:

您的方法根本不是递归的。 res 是一个可能在另一个线程中运行的计算。 res map p flatMap f 将立即返回就您的方法而言的 promise 。 repeat 的重现将发生在不同的进程中。

用稍微更简洁的术语来说,Promise 是一个延续 monad,flatMap 调用会自动为您转换为延续传递样式。


标签:Scala
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号