在对象外部导入 scalaz.syntax.traverse._ 不起作用
import scalaz.syntax.traverse._ outside the object does not work
在 scala7.0.6 上:以下程序有效:
import scalaz._, Scalaz._
object Playground extends App {
val smallNumbers = List(1,2,3,4,5)
val doubleSmall: Int => Option[Int] = x => if (x < 30) Some(x * 2) else None
import scalaz.syntax.traverse._
println(smallNumbers.traverse(doubleSmall))
}
但是,如果我将 import scalaz.syntax.traverse._
移到文件顶部的对象 Playground
之外,那么我会得到:
Error: value traverse is not a member of List[Int]
这是为什么?
当您在同一范围内导入 Scalaz._
和 scalaz.syntax.traverse._
时:
<ToTraverseOps: error> is not a valid implicit value for
Wrapper.Playground.smallNumbers.type => ?{def traverse: ?} because:
reference to ToTraverseOps is ambiguous;
it is imported twice in the same scope by
import scalaz.syntax.traverse._
and import Scalaz._
println(smallNumbers.traverse(doubleSmall))
如果 Scalaz._
和 scalaz.syntax.traverse._
在不同的(嵌套)作用域中导入则没有冲突,后者会覆盖前者。或者你可以完全删除import scalaz.syntax.traverse._
,它会编译。
scalac
有标志 -Xlog-implicits
这有帮助。
在 scala7.0.6 上:以下程序有效:
import scalaz._, Scalaz._
object Playground extends App {
val smallNumbers = List(1,2,3,4,5)
val doubleSmall: Int => Option[Int] = x => if (x < 30) Some(x * 2) else None
import scalaz.syntax.traverse._
println(smallNumbers.traverse(doubleSmall))
}
但是,如果我将 import scalaz.syntax.traverse._
移到文件顶部的对象 Playground
之外,那么我会得到:
Error: value traverse is not a member of List[Int]
这是为什么?
当您在同一范围内导入 Scalaz._
和 scalaz.syntax.traverse._
时:
<ToTraverseOps: error> is not a valid implicit value for
Wrapper.Playground.smallNumbers.type => ?{def traverse: ?} because:
reference to ToTraverseOps is ambiguous;
it is imported twice in the same scope by
import scalaz.syntax.traverse._
and import Scalaz._
println(smallNumbers.traverse(doubleSmall))
如果 Scalaz._
和 scalaz.syntax.traverse._
在不同的(嵌套)作用域中导入则没有冲突,后者会覆盖前者。或者你可以完全删除import scalaz.syntax.traverse._
,它会编译。
scalac
有标志 -Xlog-implicits
这有帮助。