Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java可以运行编译的scala代码吗?_Java_Scala - Fatal编程技术网

java可以运行编译的scala代码吗?

java可以运行编译的scala代码吗?,java,scala,Java,Scala,commandjava可以运行编译的scala代码吗?如果是这样,为什么我们有一个独占的命令scala Scala设计为易于集成 使用在modern上运行的应用程序 虚拟机,主要是Java 虚拟机(JVM)。主斯卡拉 编译器scalac生成Java类 可以在JVM上运行的文件。 -> 只要您已经安装了scala运行时,您就应该可以了:使用scalac编译类,并使用java运行它们,如果您在类路径中包含所有必要的scala运行时库(scala-library.jar,scala-swing.jar

command
java
可以运行编译的scala代码吗?如果是这样,为什么我们有一个独占的命令
scala

Scala设计为易于集成 使用在modern上运行的应用程序 虚拟机,主要是Java 虚拟机(JVM)。主斯卡拉 编译器scalac生成Java类 可以在JVM上运行的文件。 ->


只要您已经安装了scala运行时,您就应该可以了:使用
scalac
编译类,并使用
java

运行它们,如果您在类路径中包含所有必要的scala运行时库(scala-library.jar,scala-swing.jar…),您就可以运行scala生成的字节码。scala命令自动执行此操作,并支持scala特定的命令行参数。

是的,它可以。Scala被编译成Java字节码。但请记住,这取决于Scala运行时类,因此类路径上仍然需要有Scala的jar文件

如果是这样,为什么我们有一个独占的命令scala


方便包装。

只想添加我自己的答案,作为未来读者的附加值:

scala如果不带参数运行,将运行一个交互式shell

如果以文本文件名作为参数运行scala,则会将该文件视为scala脚本


如果仔细观察,
scala
命令只是一个bash助手脚本,它总结为以下命令:

$cat /usr/local/Cellar/scala@2.11/2.11.12_1/libexec/bin/scala

execCommand \
  "${JAVACMD:=java}" \
  $JAVA_OPTS \
  "${java_args[@]}" \
  "${classpath_args[@]}" \
  -Dscala.home="$SCALA_HOME" \
  $OVERRIDE_USEJAVACP \
  "$EMACS_OPT" \
  $WINDOWS_OPT \
   scala.tools.nsc.MainGenericRunner  "$@"

java -cp /usr/local/Cellar/scala@2.11/2.11.12_1/idea/lib/scala-library.jar:/training/example1/scala/ Main2
使用
java
命令运行使用
scalac
(scala编译器)编译的
.class
文件需要两件事

  • 我们需要在
    classpath
    中包含
    scala library.jar
    和.class文件的
    位置。要查找scala library.jar的位置,请执行
    下:

    哪个scala/usr/local/opt/scala@2.11/bin/scala

    在我的例子中,
    scala-*.jar
    文件位于:
    /usr/local/cell/scala@2.11/2.11.12_1/idea/lib
    在Mac上

  • /training/example1/scala
    中的
    Main2.class
    文件的位置

  • 因此,要执行程序,我们可以使用以下命令:

    $cat /usr/local/Cellar/scala@2.11/2.11.12_1/libexec/bin/scala
    
    execCommand \
      "${JAVACMD:=java}" \
      $JAVA_OPTS \
      "${java_args[@]}" \
      "${classpath_args[@]}" \
      -Dscala.home="$SCALA_HOME" \
      $OVERRIDE_USEJAVACP \
      "$EMACS_OPT" \
      $WINDOWS_OPT \
       scala.tools.nsc.MainGenericRunner  "$@"
    
    
    java -cp /usr/local/Cellar/scala@2.11/2.11.12_1/idea/lib/scala-library.jar:/training/example1/scala/ Main2
    

    编辑-1:如果您使用的是windows,请在java类路径命令中使用分号(;)作为分隔符。

    scala是解释器,而scalac是编译器。。这不仅是为了方便,也是一种不同的技术。您也可以启动编译器——它只是需要运行的另一个类(scala.tools.nsc.Main,带有适当的参数)。但是方便是方便的,那么为什么要这么做呢?这两种方法都可以做到,但做起来特别烦人——你必须调用scala.tools.nsc.maingerirunner并确保在类路径中有合适的工具。为什么不让scala脚本帮你做呢?
    java-cp./scala-reflect-2.11.8.jar:./scala-library-2.11.8.jar HelloWorld
    这对我不起作用。我的HelloWorld程序就是这个
    对象HelloWorld{def main(args:Array[String]):Unit={println(“hello,world!”}
    谢谢。什么是“scala命令”?
    scala
    命令是编译器吗?@Tim
    scala
    用于运行编译后的代码,scala编译器应该是
    scalac