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