在Spark Repl(引用A是模棱两可)上的错误,并且在Intellij和Scala Repp中正常工作



我有一个示例代码:

    class A(str: String) {
  println(s"InsideCase:::$str")
}
object A {
  def apply(str: String) = {
    println("foobar::")
    new A(str)
  }
}
object b extends App {
  A("kool")
}

此代码在Intellij中正常工作。并给我输出:

foobar::
InsideCAse:::kool

但是,当尝试在REPL上执行此操作时:

scala> :paste
// Entering paste mode (ctrl-D to finish)
class A(str: String) {
  println(s"InsideCAse:::$str")
}
object A {
  def apply(str: String) = {
    println("foobar::")
    new A(str)
  }
}

// Exiting paste mode, now interpreting.
defined class A
defined object A
scala> A("kool")

它给我以下错误:

<console>:27: error: reference to A is ambiguous;
it is imported twice in the same scope by
import $line31$read.A
and import INSTANCE.A
       A("kool")

我在这里想念什么?如果可以的话,请详细说明这将有所帮助。

这是火花重新限制。您可以用物体包装器进行旧学校的方式:

object awrapper {
  class A(str: String) {
    println(s"InsideCAse:::$str")
  }
  object A {
    def apply(str: String) = {
      println("foobar::")
      new A(str)
    }
  }
}
import awrapper._

或用paste -raw(Scala 2.11 )定义软件包:

scala> :paste -raw
// Entering paste mode (ctrl-D to finish)
package apacakage
class A(str: String) {
  println(s"InsideCAse:::$str")
}
object A {
  def apply(str: String) = {
    println("foobar::")
    new A(str)
  }
}

// Exiting paste mode, now interpreting.

scala> import apacakage._
import apacakage._
scala> A("kool")
foobar::
InsideCAse:::kool
res1: apacakage.A = apacakage.A@6e818345

最新更新