【问题标题】:Scala Future mapTo fails to compile because of missing ClassTag由于缺少 ClassTag,Scala Future mapTo 无法编译
【发布时间】:2013-03-23 07:12:47
【问题描述】:

简单的问题,我有一个问题,在 ask 的结果上使用 mapTo 会导致编译器错误:

not found: value ClassTag

例如:

(job ? "Run").mapTo[Result]
                   ^

我不明白为什么它需要一个 ClassTag 来进行演员表?如果我用 String 替换 Predef 中的标准类,就像在 (job ? "Run").mapTo[String] 中一样,编译OK。

当我在相关行的正上方定义类时会发生这种情况,如下所示:

class Result {}
(job ? "Run").mapTo[Result]

我仍然遇到同样的问题。

谢谢,杰森。

我还应该声明我正在使用 Scala 2.10.0 和 Akka 2.1.0(如果有区别的话)。

【问题讨论】:

  • 到目前为止,您的代码看起来还不错 - 那么您可以发布您使用的导入吗?可能缺少导入。
  • 我刚刚发现了一个comment,关于 Scala 2.10.0 的不同里程碑中的不兼容性。它建议import reflect.ClassTag。如果这是最近才修复的问题,请尝试使用 Scala 2.10.1 和 Akka 2.1.1。
  • @michael_s,天才,谢谢你,添加import reflect.ClassTag 成功了!还没有尝试更新 Scala 版本,在开发周期的这个阶段有点不愿意更改包依赖项。如果您想发表您的评论作为答案,我可以将其标记为正确并给您一些状态。
  • OK - 出于文档目的添加了这一点 - 随意给予学分。虽然我认为这对于非常特殊的情况来说是一个问题。但无论如何 - 我知道编译器错误也不是很有帮助。

标签: scala akka future


【解决方案1】:

这似乎是 Scala 2.10.0 版本的一个特殊问题

添加后

import reflect.ClassTag

mapTo 中隐式使用的 ClassTag 参数应该可以工作。

要么这样做,要么更新到 Akka/Scala 的较新版本(如果可能,应该首选)。

【讨论】:

  • 2.10.1 大约在一周半前(2013/3/13)发布。
  • 仍然无法使用 Akka 2.1.2 和 Scala 2.10.1,顺便说一句。
  • 如果您使用泛型,我还必须添加 implicit arg tag: ClassTag[R]。示例:def reqReply[M, R]( message:M, process: R => Unit )( implicit tag: ClassTag[R] ) = ( myAkkaService ? message ).onComplete{ case Success( Some( r: R ) ) => process( r ) ... } // Simplified example
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多