Sta*_*ura 6 constructor scala variadic-functions
我是斯卡拉新手.我已经浏览了几本书,并阅读了一些在线教程.我的第一个项目遇到了问题,因此我将代码简化为最简单的问题.
我搜索了谷歌和堆栈溢出scala/constructors/varargs,并阅读了几个scala之旅.
(几乎)最简单的代码是:
class Foo(val params: Int*)
case class Foo1(val p: Int) extends Foo(p)
case class Foo2(val p1: Int, val p2: Int) extends Foo(p1, p2)
object Demo extends App {
override def main(args: Array[String]) {
val f = Foo2(1, 2)
f.p1
}
}
Run Code Online (Sandbox Code Playgroud)
访问p1时发生异常,是
线程"main"中的异常java.lang.ClassCastException:scala.collection.mutable.WrappedArray $ ofInt无法强制转换为java.lang.Integer
使用eclipse进行调试时,我发现了一个有趣的属性:查看变量时
f Foo2 (id=23)
p2 2
params WrappedArray$ofInt (id=33)
array (id=81)
[0] 1
[1] 2
Run Code Online (Sandbox Code Playgroud)
那么p1发生了什么?
我很抱歉用新手问题困扰你
你没错,但编译器是.它试图p1摆脱p(在你的情况下它会试图Foo2.p1摆脱Foo.params):
def p1(): Int = scala.Int.unbox(Main$$anon$1$B.super.p());
Run Code Online (Sandbox Code Playgroud)
这显然是一个错误,因为它无法正常工作.相反,它应该p1在子类的ctor中分配.
我报告了一个错误:SI-7436.