当前位置: 首页 > 面试题库 >

我如何查看Scala编译器在什么[Java / Scala?]代码中重写原始的Scala代码

时修贤
2023-03-14
问题内容

在Scala邮件列表中,不同的人经常说:“编译器将此[scala]代码重写为此[java / scala
??]代码”。例如,如果最新的线程之一,Scala看到

class C(i: Int = 4) { ... }

然后编译器将其重写为(有效):

class C(i: Int) { ... }
object C {
  def init$default$1: Int = 4
}

我如何找出我的代码的编译器输出是什么?我应该为此反编译生成的字节码吗?


问题答案:

您可以使用“ -print”作为编译器选项,而scalac将删除所有Scala特定的功能

例如,这是原始代码:

class Main
{
    def test (x: Any) = x match {
        case "Hello" => println ("Hello World")
        case e: String => println ("String")
        case i: Int => println ("Int")
        case _ => println ("Something else")
    }
}

如果使用“ scalac -print”进行编译,您将获得以下Scala代码。

[[syntax trees at end of cleanup]]// Scala source: Test.scala
package <empty> {
  class Main extends java.lang.Object with ScalaObject {
    def test(x: java.lang.Object): Unit = {
      <synthetic> val temp1: java.lang.Object = x;
      if (temp1.==("Hello"))
        {
          scala.this.Predef.println("Hello World")
        }
      else
        if (temp1.$isInstanceOf[java.lang.String]())
          {
            scala.this.Predef.println("String")
          }
        else
          if (temp1.$isInstanceOf[Int]())
            {
              scala.this.Predef.println("Int")
            }
          else
            {
              scala.this.Predef.println("Something else")
            }
    };
    def this(): Main = {
      Main.super.this();
      ()
    }
  }
}


 类似资料:
  • 我试图理解Scala代码如何在Java的IDE中与Java一起工作。我在使用Spark Java时遇到了这个疑问,在Spark Java中,我看到Scala包也在代码中,并且使用了相应的类和方法。 我的理解是,Scala代码需要Scala的编译器转换成Java.class文件,然后从它们开始JDK在JVM中完成它的部分,转换成二进制文件并执行操作。如果我说错了,请指正。 之后,在eclipse中的

  • 迭代器不是集合,而是逐个访问集合元素的方法。 iterator it上的两个基本操作是next和hasNext 。 对it.next()调用将返回迭代器的下一个元素并提升迭代器的状态。 您可以使用Iterator的it.hasNext方法找出是否有更多元素要返回。 “逐步”迭代器返回的所有元素的最简单方法是使用while循环。 让我们按照以下示例程序进行操作。 例子 (Example) objec

  • 问题内容: 我需要一些Scala和Java代码的代码示例(并且我也对此感到很好奇),这些示例表明Scala代码比用Java编写的代码更简单,简洁(当然,两个示例都应该解决相同的问题)。 如果只有Scala示例带有注释,例如“这是Scala中的抽象工厂,在Java中看起来会很麻烦”,那么这也是可以接受的。 谢谢! 我最喜欢的所有接受和这个答案 问题答案: 让我们改进堆栈器的示例,并使用Scala的c

  • 问题内容: 命令可以运行已编译的Scala代码吗?如果是这样,我们为什么要使用排他命令? 问题答案: 如果您在类路径中包含了Scala的所有必要运行时库(scala-library.jar,scala-swing.jar …),则可以运行Scala生成的字节代码。scala命令自动执行此操作,并支持特定于Scala的命令行参数。

  • 问题内容: 我正在尝试从Java代码中使用代码,原因是它在Eclipse中不起作用,而Scala则可以。但我无法获得方法 之所以能够正常工作,是因为它似乎期望第二个参数使用a,而且我看不到如何在Java中创建a 。我该如何解决? 我尝试过的事情: 1)使用null -获得奖励。 2)替换为with ,但是javac报告各种错误,例如没有方法。 3)在包对象中使用该对象,但此处建议的语法为,但无法解