scala> Some(Some(9))
res23: Some[Some[Int]] = Some(Some(9))
scala> res23.join #plan a
<console>:24: error: value join is not a member of Some[Some[Int]]
res23.join
^
scala> ((Some(Some(9))):Option[Option[Int]]).join #plan b
res25: Option[Int] = Some(9)
以为plan a
应该等同于plan b
。为什么必须明确指定类型?
不仅如此,我还看到了必须明确拼写参数类型的其他地方。思想scala可以做类型推断,不是吗?
答案 0 :(得分:2)
答案在你的REPL中:)
在第三行中,您声明了Option[Option[Int]]
而不是Some[Some[Int]]
,这是第一个命令中推断的类型。
尝试:
scala> Option(Option(9)).join
res3: Option[Int] = Some(9)