【发布时间】:2018-05-31 19:20:03
【问题描述】:
使用 spark-shell v1.6。
加载类 def 及其伴随对象时的巨大差异取决于它是如何完成的。
- 一次一行 - 好的
- 通过
:paste- 问题
首先...由于 repl 发现加载具有相同名称的伴随对象不明确,因此我给它一个更改的名称。那里没问题。设置看起来像这样...
import scala.util.Try
class Foo5(val i: Int)
object Foo5Companion {
def apply(i: Int): Foo5 = new Foo5(i)
def apply(d: Double): Foo5 = new Foo5(d.toInt)
def applyTry(i: Int): Try[Foo5] = Try { apply(i) }
def applyTry(d: Double): Try[Foo5] = Try { apply(d) }
}
现在让我们用这个类做一些简单的事情。
val ls_i: List[Int] = List(1,2,3)
val ls_foo: List[Foo5] = ls_i.map(Foo5Companion.apply)
如果我使用:paste 加载了类def 和伴随对象,我会收到此错误...要清楚,Foo5 仅在新会话中定义一次。这不是此处描述的问题的一个实例:"error: type mismatch" in Spark with same found and required datatypes
<console>:42: error: type mismatch;
found : List[Foo5]
required: List[Foo5]
val ls_foo: List[Foo5] = ls_i.map(Foo5Companion.apply)
但是……
如果我逐行加载相同的定义(不使用:paste)...它工作正常...
ls_foo: List[Foo5] = List($iwC$$iwC$Foo5@66f1a93a, $iwC$$iwC$Foo5@39d53a3, $iwC$$iwC$Foo5@4dddf42f)
我的问题是......有什么区别?为什么:paste 会导致问题并让repl 认为Foo5 是模棱两可的?
【问题讨论】:
-
我认为这可能是与链接问题相同的潜在问题;那里的“跟踪你脑海中的一切”的建议并不友好;这是 REPL 的工作。
标签: scala apache-spark