- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始使用 Akka/Scala 进行编码,遇到了以下问题:
在范围内进行隐式转换,例如:
implicit def convertTypeAtoTypeX(a: TypeA): TypeX =
TypeX() // just some kinda conversion
这有效:
returnsAFuture.mapTo[TypeX].map { x => ... }
但这不是:
returnsAFuture.mapTo[TypeX].onComplete { ... }
后者因类型转换异常而失败。 (即 TypeA 无法转换为 TypeX)
非常困惑。为什么?我怀疑这与 Try 有关,但我对其中任何一个都了解不够,无法猜测任何类型的答案:(
谢谢!
最佳答案
来自文档:
def mapTo[S](implicit tag: ClassTag[S]): Future[S]
Creates a new Future[S] which is completed with this Future's result if that conforms to S's erased type or a ClassCastException otherwise.
此函数只能用于在具有某种继承关系的对象之间进行转换。它不期望任何隐式证据从 [T] 转换为 [S](它甚至不知道 T!)
该函数用于例如在 Akka 中,你询问一个 actor 并收到 Future[Any] 的响应。但你知道 Actor 会返回 String,这样你就可以安全地写 actor.ask(...).mapTo[String]
这会起作用,因为 Any 可以转换到一切。这里没有使用隐式转换。
现在您说您的第一个示例有效。但这条线甚至没有被计算,因为您从不请求结果。为了形象化,Scala 编译器说:好吧,你只是在这个 future 的结果上做一个映射(从类型 X 更改为类型 Y),但你从未真正使用它,所以如果你不这样做,为什么还要执行它呢?关心自己吗?
如果您在第一行的 map 后面添加了 onComplete,您将看到相同的 ClassCastException。
这可能就是您现在想要的,但这很有趣:
returnsAFuture.map { x => x.fieldOnlyInTypeX }
如果您使用“x”,就好像它是 TypeX 类型一样,一切都会正常工作。Scala 编译器将对“x”应用隐式转换,将其转换为 TypeX。这可能不是您想要的,因为“x”仍然是 TypeA 类型,并且在 map 中每次使用时都会通过隐式转换。
~克日西克
关于scala - 在 Akka/Scala 中使用带有 future 的 mapTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29314093/
尝试建立一些东西,但卡住了,错过了这里的任何错误。我想跟踪按钮点击,但从 #zip 输入中获取值,所以这就是我选择 mapTo 的原因。当我删除 mapTo 时,我可以跟踪点击并更改我在订阅函数中的语
我正在阅读 Akka Futures Guide我看到这句话: Also note that the Future returned by an Actor is a Future[Any] sinc
我要映射 Map至Map但我无法在 map 函数中返回 Map.Entry: itemsWithQuantity.mapTo(mutableMapOf(), { it.key.toString() t
之前我使用的是这段代码: private val mItems = ArrayList() (1..item_count).mapTo(mItems) { it } /* mItems will b
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
背景 我正在尝试使用 go-fed 的 apcore构建联合应用程序的框架。我已经实现了 apcore.Application 接口(interface),但在加载配置时卡住了。 当尝试将从 conf
我发现了一段我看不懂的代码。 我正在将 JSONArray 转换为 List。 Kotlin 在其 stdlib( link ) 中提供了函数 mapTo mapTo inline fun > Ite
试图了解 kotlin 中 map 和 mapTo 之间的区别。谁能帮我解释一下使用一些例子的区别 最佳答案 map 在内部创建一个新列表,并将其结果放入该列表,然后返回该列表: val mapRes
function c() { return Math.random(); } source$.pipe( map(a => c()) ).subscribe(v => c
我最近开始使用 Akka/Scala 进行编码,遇到了以下问题: 在范围内进行隐式转换,例如: implicit def convertTypeAtoTypeX(a: TypeA): TypeX =
在将相同的具体类注册到不同的未命名实例时,我们看到 Unity 出现意外行为。在这种情况下,注册似乎以意想不到的方式相互干扰。 我们为我们想要注入(inject)的其他应用程序提供了一个框架不同的界面
我们如何转换: Rx.Observable.timer(3000).mapTo({ id: 1 }) 到 RxJS 6? 例如,如果我们: import { Observable, timer }
我是一名优秀的程序员,十分优秀!