我最近尝试了Scala 函数式编程中的一些并发练习的变体 (很棒的书,顺便说一句.. 早期访问版可免费下载!)。第 7 章涉及创建一个单子类型构造函数 Par[X],它允许任何类型 X 的表达式在与ExectutorService配对时被分叉并并行运行
我尝试的变体是创建一个 API,允许调用者将并行表达式(参数化类型 Par[X] 的实例)平面映射在一起。我想要一些与 Option/Some/None 类似的东西,如果其中一个平面图导致链中的一个恰好是失败(在 Option 的情况下为“无”),那么该失败会“冒泡”到top,这样构造链的调用者只需要检查顶层返回值是不是错误前哨即可。(希望从这个解释中我想要做的很清楚)。无论如何...我在构建错误标记时遇到了问题。
我尝试以两种方式构造它,作为案例对象和作为案例类。在第一个实例中,案例对象,我得到了这个错误
Object creation impossible since member get():V in java.util.concurrent.future is not defined.
这是我的第一种情况的代码:
case object Failure extends Future[Nothing] {
def isDone = true
// why is compiler telling me i'm not defining this, when def'n is below?
def get(timeout: Long, units: TimeUnit) =
throw new NoSuchElementException("nothing to get from failure")
def isCancelled = false
def cancel(evenIfRunning: Boolean): Boolean = false
}
然后我尝试使用从 Future[Nothing] 扩展的案例类,如下所示:
case class Failure2 extends Future[Nothing] {
def isDone = true
def get(timeout: Long, units: TimeUnit) = throw new NoSuchElementException("nothing to get from failure")
def isCancelled = false
def cancel(evenIfRunning: Boolean): Boolean = false
}
这导致了以下错误:
class Failure2 must be declared abstract or implement abstract member get():V in java.util.concurrent.future
如果你们中的任何一位专业的 Scala API 构建者可以帮助指导我找到解决方案,我将不胜感激!