Scala语言的理解

示例

如果您有几个单子类型的对象,我们可以使用“用于理解”来实现值的组合:

for {
   x <- Option(1)
   y <- Option("b")
   z <- List(3, 4)
} {
    // 现在我们可以使用x,y,z变量
    println(x, y, z)
    x  // 在这种情况下,最后一个表达式*不是*块的输出!
}

// 此打印
// (1, "b", 3)
// (1, "b", 4)

此块的返回类型为Unit。

如果对象具有相同的单子类型M(例如Option),则usingyield将返回类型为M而不是的对象Unit。

val a = for {
   x <- Option(1)
   y <- Option("b")
} yield {
    // 现在我们可以使用x,y变量
    println(x, y)
    // 输出在块的末尾是输出
    (7 * x, y)
}

// 此打印:
// (1, "b")
// val`a设置为:
// a:选项[(Int,String)] =某((7,b))

请注意,在混合示例类型(和)混合的原始示例中,不能使用yield关键字。尝试这样做将产生编译时类型不匹配错误。OptionList