为什么 Scala 枚举在 Apache Zeppelin 中不起作用但在 Maven 中有效
Why Scala Enumeration does not work in Apache Zeppelin but it works in maven
当我在 Maven 项目(使用相同的 Scala 版本)中使用它时,枚举按预期工作。
object t {
object DashStyle extends Enumeration {
val Solid,ShortDash = Value
}
def f(style: DashStyle.Value) = println(style)
def main(args: Array[String]) = f(DashStyle.Solid)
}
但是当它运行在 Apache Zeppelin(Zeppelin 0.6, Spark 1.6, Scala 2.10, Java 1.8)
object DashStyle extends Enumeration {
val Solid,ShortDash = Value
}
def f(style: DashStyle.Value) = println(style)
f(DashStyle.Solid)
它报告以下错误,即使它说找到和需要的类型完全相同
<console>:130: error: type mismatch;
found : DashStyle.Value
required: DashStyle.Value
f(DashStyle.Solid)
为什么以及如何使用它?
我想出了解决这个问题的诀窍。
在 Apache Zeppelin(或 Scala REPL)中。为了使用 Enumeration 或 sealed&object,它应该被包裹在 object 中而不是直接在根范围上定义。
之所以在maven中能用,是因为我已经把它放到一个对象中了。
在 Zeppelin 段落中的对象中定义枚举
object t {
object DashStyle extends Enumeration {
val Solid,ShortDash = Value
}
def f(style: DashStyle.Value) = println(style)
}
然后在 Zeppelin 段落中使用它
import t._
f(DashStyle.Solid)
当我在 Maven 项目(使用相同的 Scala 版本)中使用它时,枚举按预期工作。
object t {
object DashStyle extends Enumeration {
val Solid,ShortDash = Value
}
def f(style: DashStyle.Value) = println(style)
def main(args: Array[String]) = f(DashStyle.Solid)
}
但是当它运行在 Apache Zeppelin(Zeppelin 0.6, Spark 1.6, Scala 2.10, Java 1.8)
object DashStyle extends Enumeration {
val Solid,ShortDash = Value
}
def f(style: DashStyle.Value) = println(style)
f(DashStyle.Solid)
它报告以下错误,即使它说找到和需要的类型完全相同
<console>:130: error: type mismatch;
found : DashStyle.Value
required: DashStyle.Value
f(DashStyle.Solid)
为什么以及如何使用它?
我想出了解决这个问题的诀窍。
在 Apache Zeppelin(或 Scala REPL)中。为了使用 Enumeration 或 sealed&object,它应该被包裹在 object 中而不是直接在根范围上定义。
之所以在maven中能用,是因为我已经把它放到一个对象中了。
在 Zeppelin 段落中的对象中定义枚举
object t {
object DashStyle extends Enumeration {
val Solid,ShortDash = Value
}
def f(style: DashStyle.Value) = println(style)
}
然后在 Zeppelin 段落中使用它
import t._
f(DashStyle.Solid)