Scala:隐式展平?

标签 scala

Welcome to Scala version 2.10.1 (OpenJDK 64-Bit Server VM, Java 1.6.0_27).
Type in expressions to have them evaluated.
Type :help for more information.

scala> def o1: Option[Option[Unit]] = Some(()).map(Some(_))
o1: Option[Option[Unit]]

scala> o1
res0: Option[Option[Unit]] = Some(Some(()))

到目前为止,一切都在预料之中。但是如果我们忘记指定我们有一个 Option 怎么办?嵌套在 Option 中?
scala> def o2: Option[Unit] = Some(()).map(Some(_))
o2: Option[Unit]

scala> o2
res1: Option[Unit] = Some(())

为什么编译器接受这个并隐式地压平该值?

最佳答案

任何东西都可以转换为 Unit :

scala> val a: Unit = Some(())
a: Unit = ()

为您 o2 , 编译器转换 Some[Unit]Unit .请注意,当然,如果替换 Unit 则不会发生这种情况。来自 Int , 例如:
scala> def o2: Option[Int] = Some(4).map(Some(_))
<console>:7: error: type mismatch;
 found   : Some[Int]
 required: Int
       def o2: Option[Int] = Some(4).map(Some(_))

关于Scala:隐式展平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18241095/

相关文章:

scala - 为什么在 Scala 中使用默认值实例化特征会导致编译错误?

scala - 你如何缩进scaladoc的代码块

java - NoSuchMethodError : scala. Predef$.$conforms()Lscala/Predef$$less$冒号$less

json - 使用 Specs2 测试 json 数据

scala - Scala 是如何在幕后实现加法运算符的?

scala - 使用Scala将Map映射到Spark appln中的可变列表

sql - 如何使用 scala slick 3 发送纯 SQL 查询(并检索结果)

java - 为什么 Scala 偶尔会回退到 Java 对象?

scala - 如何在 Scalding 中定义源字段

scala - 为什么Scala不会将此类型Lambda与基础类型统一?