您好我有关于拳击和IntelliJ de-sugar菜单的问题。
因此,当我将一个Int包装到一个Scala选项中时,我希望该原语会被装箱一次,但是当我在IntelliJ中对Scala代码进行去糖时,我会得到一个像5次或更多次的盒装值
object App {
def main(args: Array[String]): Unit = {
val a: Option[Int] = Some(1)
}
}
现在当我使用De-sugar菜单时,我得到了这段代码
object App {
def main(args: Array[String]): Unit = {
val a: Option[Int] = Some.apply(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
Predef.Integer2int(scala.runtime.BoxesRunTime.boxToInteger(
1
)))))))))))))))))))))
}
}
其中原始盒子很多次。现在这似乎会使我的代码膨胀。
为什么需要多次选择Option [Int]。
答案 0 :(得分:2)
这是一个错误,已被IntelliJ
接受为错误答案 1 :(得分:1)
听起来很奇怪,它可能是IntelliJ的人工制品吗?
在命令行中使用scala 2.12.5:
./scala -Xprint:typer -e "val a: Option[Int] = Some(1)"
似乎产生了一个电话:
private[this] val a: Option[Int] = scala.Some.apply[Int](1);
完整的结果是:
[[syntax trees at end of typer]] // scalacmd4175089397487439052.scala
package <empty> {
object Main extends scala.AnyRef {
def <init>(): Main.type = {
Main.super.<init>();
()
};
def main(args: Array[String]): Unit = {
final class $anon extends scala.AnyRef {
def <init>(): <$anon: AnyRef> = {
$anon.super.<init>();
()
};
private[this] val a: Option[Int] = scala.Some.apply[Int](1);
<stable> <accessor> private def a: Option[Int] = $anon.this.a
};
{
new $anon();
()
}
}
}
}