SCALA Option&地图构造

时间:2018-02-07 17:24:28

标签: scala

在讨论MONAD时遇到过这个问题,虽然有点难以理解。但问题是,我可以使用大数据获取地图和平面图,但这里的东西让我觉得非常不稳定。 firstname =>姓氏,复合=>等等没有得到它...谁能解释?它虽然有效。

val maybeFirstName = Option("Joe");
val maybeLastName = Option("Black");

val maybeFullName = maybeFirstName.flatMap { firstName =>
  maybeLastName.map { lastName =>
    firstName + " " + lastName
 }
}

2 个答案:

答案 0 :(得分:0)

Map在maybeLastName和returns Option或Option(Joe Black)上应用函数。因此,如果使用map而不是flatMap,则会获得Option(Option(Joe Black)),因为map始终返回新的Option,因此要删除内部选项,您需要使用flatMap或组合映射并展平。

在这里,您可以了解flatten

的工作原理

答案 1 :(得分:0)

与许多复合操作一样,从内到外解读它有时是有意义的。

maybeLastName.map(lastName => /*some op on lastName*/)

map()打开Option并将值(如果它在那里)分配给lastName。如果OptionNone,则表示没有lastName且没有操作。如果Option不是None,则执行操作并将结果重新包装到Option

flatMap()做同样的事情,除了它不重新包装结果。相反,op inside需要返回一个已经包裹的值,即Option

所以,回顾一下:

maybeFirstName.flatMap { firstName =>  //op on firstName must return Option
  maybeLastName.map { lastName =>      //op on lastName should not return Option
    /* op */
  }
}

如果maybe...NameNone,则最终结果为None