scalaz join操作需要显式指定类型

时间:2015-01-26 06:32:47

标签: scalaz

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可以做类型推断,不是吗?

1 个答案:

答案 0 :(得分:2)

答案在你的REPL中:)

在第三行中,您声明了Option[Option[Int]]而不是Some[Some[Int]],这是第一个命令中推断的类型。

尝试:

scala> Option(Option(9)).join
res3: Option[Int] = Some(9)