【发布时间】:2022-01-01 01:58:03
【问题描述】:
我有一个任务来转换以下代码块:
val instance = instanceFactory.create
val result = instance.ackForResult
为了理解表达。
由于理解依赖于元素的枚举,我尝试使用包装类来解决它:
case class InstanceFactoryWrapper(value:InstanceFactory) {
def map(f: InstanceFactory => Instance): Instance
= value.create()
}
其中 map-method 必须只处理一个元素并返回一个结果:实例
我用这个表达式测试了这个方法:
for {
mediationApi <- InstanceFactoryWrapper(instanceFactoryWrapper)
}
但它不起作用:IDEA 建议我在这部分使用 foreach。但与 map 不同,“foreach”不返回任何内容。
我做错了什么?
【问题讨论】:
-
你为什么要将工作代码更改为
for理解仅仅因为?! - 无论如何,这些表达式的类型是什么? -
我认为它是“链接”两个代码表达式的一种方式:第二个表达式使用第一个的结果。并且,当 2-d 完成但没有成功时,可能由于 1-t 表达式的格式错误而发生。
-
但是您可以像
instanceFactory.create.ackForResult一样将它们链接起来。没有集合/异步计算/错误处理/其他类型的生产者可以证明.map是合理的。我认为在您的原始情况下唯一可能的.map、.flatMap等是type Id[A] = A,直接在理解中使用是没有意义的。 -
@Andrew 您的代码在这方面有何不同?请注意,
for的目的是让一元组合看起来就像命令式代码(你有什么)