scalaz 连接操作需要显式指定类型
scalaz join operation requires type explicitly specified
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 可以进行类型推断,不是吗?
答案在你的 REPL 中:)
在第三行中,您声明了一个 Option[Option[Int]]
而不是 Some[Some[Int]]
,这是在第一条命令中推断出的类型。
尝试:
scala> Option(Option(9)).join
res3: Option[Int] = Some(9)
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 可以进行类型推断,不是吗?
答案在你的 REPL 中:)
在第三行中,您声明了一个 Option[Option[Int]]
而不是 Some[Some[Int]]
,这是在第一条命令中推断出的类型。
尝试:
scala> Option(Option(9)).join
res3: Option[Int] = Some(9)