Scala:对操作链的理解

Scala: for-comprehension for chain of operations

我的任务是转换以下代码块:

  val instance = instanceFactory.create
  val result = instance.ackForResult

求理解表达式。

至于理解依赖于元素的枚举,我试图用包装器绕过它 class:

case class InstanceFactoryWrapper(value:InstanceFactory) {   
     def map(f: InstanceFactory => Instance): Instance
    = value.create()
 }

其中 map-method 必须只处理一个元素和 return 单个结果:Instance

我用这个表达式测试了这个方法:

 for {
     mediationApi <- InstanceFactoryWrapper(instanceFactoryWrapper)
}

但是不行:IDEA建议我在这部分使用foreach。但是“foreach”没有 return 任何东西,与 map 相对。

我做错了什么?

简单地说,在使用 List\Option\Either 或其他语言类型时,理解对于将嵌套的 map\flatMap\withFilter 转换为序列很有用。

在理解中使用自定义 classes

但是您自己的 class 或其他第 3 方的呢?

您需要实现单子运算才能在 for-comprehensions 中使用它们。
最低限度:map 和 flatMap

以自定义配置为例class:

case class Config[T](content: T) {

  def flatMap[S](f: T => Config[S]): Config[S] =
    f(content)

  def map[S](f: T => S): Config[S] =
    this.copy(content = f(content))
}

for {
  first  <- Config("..")
  _      =  println("Going through a test")
  second <- Config(first + "..")
  third  <- Config(second + "..")
} yield third

这就是您启用理解的方式。