如何在 jupyter notebook 中 运行 scala 值 class
How to run a scala value class in a jupyter notebook
我正在尝试 运行 Jupyter notebook 中的以下代码:
trait Printable extends Any {
def print(): Unit = println(this)
}
class Wrapper(val underlying: Int) extends AnyVal with Printable
object Demo {
def main(args: Array[String]) {
val w = new Wrapper(3)
w.print() // actually requires instantiating a Wrapper instance
}
}
Demo.main(Array())
执行单元格时出现错误消息:
Name: Compile Error
Message: <console>:15: error: value class may not be a member of another class
class Wrapper(val underlying: Int) extends AnyVal with Printable
^
StackTrace:
我认为发生这种情况是因为 Jupyter 可能 运行 宁 scala
命令而不是 scalac
命令,显然 scala
将所有内容包装到顶层class 启用脚本。值 class 不能是内部 class,因此是错误的原因。有一个关于这个主题的相关问题:
这个问题有解决办法吗?
我正在使用我的 Jupyter notebook 运行ning Apache Toree Scala。
OS:OS X 10.11.6、Scala 2.11.8、Jupyter 4.3.0、Apache Toree 0.2.0。
提前致谢!
如果您修改 Wrapper class,使其不再扩展 AnyVal,那么它就不再是 "value class",您的问题就会消失。但是如果你这样做,你将不再从 AnyVal 继承 print 函数,而是从 Any 获取它(Any 是所有 classes 的超级 class,就像 Java 中的 Object) .因此,要保留相同的功能,您必须重写打印功能:
trait Printable extends Any {
def print(): Unit = println(this)
}
class Wrapper(val underlying: Int) extends Printable {
override def print(): Unit = println(underlying)
}
object Demo {
def main(args: Array[String]) {
val w = new Wrapper(3)
w.print() // actually requires instantiating a Wrapper instance
}
}
Demo.main(Array())
我正在尝试 运行 Jupyter notebook 中的以下代码:
trait Printable extends Any {
def print(): Unit = println(this)
}
class Wrapper(val underlying: Int) extends AnyVal with Printable
object Demo {
def main(args: Array[String]) {
val w = new Wrapper(3)
w.print() // actually requires instantiating a Wrapper instance
}
}
Demo.main(Array())
执行单元格时出现错误消息:
Name: Compile Error
Message: <console>:15: error: value class may not be a member of another class
class Wrapper(val underlying: Int) extends AnyVal with Printable
^
StackTrace:
我认为发生这种情况是因为 Jupyter 可能 运行 宁 scala
命令而不是 scalac
命令,显然 scala
将所有内容包装到顶层class 启用脚本。值 class 不能是内部 class,因此是错误的原因。有一个关于这个主题的相关问题:
这个问题有解决办法吗?
我正在使用我的 Jupyter notebook 运行ning Apache Toree Scala。
OS:OS X 10.11.6、Scala 2.11.8、Jupyter 4.3.0、Apache Toree 0.2.0。
提前致谢!
如果您修改 Wrapper class,使其不再扩展 AnyVal,那么它就不再是 "value class",您的问题就会消失。但是如果你这样做,你将不再从 AnyVal 继承 print 函数,而是从 Any 获取它(Any 是所有 classes 的超级 class,就像 Java 中的 Object) .因此,要保留相同的功能,您必须重写打印功能:
trait Printable extends Any {
def print(): Unit = println(this)
}
class Wrapper(val underlying: Int) extends Printable {
override def print(): Unit = println(underlying)
}
object Demo {
def main(args: Array[String]) {
val w = new Wrapper(3)
w.print() // actually requires instantiating a Wrapper instance
}
}
Demo.main(Array())