Scala Language Monádico para las comprensiones.


Ejemplo

Si tiene varios objetos de tipos monádicos , podemos lograr combinaciones de los valores utilizando un 'para comprensión':

for {
   x <- Option(1)
   y <- Option("b")
   z <- List(3, 4)
} {
    // Now we can use the x, y, z variables
    println(x, y, z)
    x  // the last expression is *not* the output of the block in this case!
}

// This prints
// (1, "b", 3)
// (1, "b", 4)

El tipo de retorno de este bloque es la Unit .

Si los objetos son del mismo tipo monádico M (p. Ej., Option ), usar el yield devolverá un objeto de tipo M lugar de Unit .

val a = for {
   x <- Option(1)
   y <- Option("b")
} yield {
    // Now we can use the x, y variables
    println(x, y)
    // whatever is at the end of the block is the output
    (7 * x, y)
}

// This prints:
// (1, "b")
// The val `a` is set:
// a: Option[(Int, String)] = Some((7,b))

Tenga en cuenta que la palabra clave de yield no se puede utilizar en el ejemplo original, donde hay una combinación de tipos monádicos ( Option y List ). Tratar de hacerlo producirá un error de falta de coincidencia de tipo de tiempo de compilación.