Intellij-idea中的scala类,脚本和工作表有什么区别?

Omi*_*imi 19 scala intellij-idea sbt scala-script

我正在使用Intellij-idea进行scala编程(使用sbt插件).

我想知道scala类,scala脚本和scala工作表之间的区别.当我们使用它们时?

如果您能通过一个简单的例子来解释它,这将是非常好的.

谢谢

anq*_*egi 10

您有不同的运行scala代码的方法:

首先用你的类创建一个程序,就像在java中一样,我使用object因为它没有实例化就好了,比如静态,只需用SBT编译并运行它你也可以使用scala Interpreter REPL

我们可以在REPL中使用这个对象

scala>  object Hello {
     |   def main(args:Array[String]) {
     |     println("Hello, Scala !!")
     |   }
     | }
defined object Hello

scala> Hello.main(Array("onlyforwork"))
Hello, Scala !!
Run Code Online (Sandbox Code Playgroud)

使用activator/SBT编译和运行它

> compile
[info] Compiling 1 Scala source to /home/anquegi/Dev/StackOverFlow/scalaStack/target/scala-2.11/classes...
[success] Total time: 2 s, completed 13/04/2015 11:29:42
> run
[warn] Multiple main classes detected.  Run 'show discoveredMainClasses' to see the list

Multiple main classes detected, select one to run:

 [1] org.example.Hello
 [2] org.example.ScheduledTaskScala
 [3] question1.Ques
 [4] scriptworksheet.Hello

Enter number: 4

[info] Running scriptworksheet.Hello 
Hello, Scala !!
[success] Total time: 19 s, completed 13/04/2015 11:30:04
Run Code Online (Sandbox Code Playgroud)

第二个是,如果我们将scala代码添加为脚本或文件Hello.scala,您可以将scala代码保存在扩展名为.scala的文件中(基本上使用任何文件扩展名但扩展名为.scala)并运行,提供文件带扩展名的名称作为scala解释器的参数

/**
 * Created by anquegi on 13/04/15.
 */

println("Hello, Scala !!")
Run Code Online (Sandbox Code Playgroud)

如果我们调用scala解释器执行这个文件,你不需要实例化对象或clases,只需像shell脚本一样执行,你也可以直接从Intellij执行,但我使用控制台安装scala的系统

[anquegi@localhost scalaStack]$ scala src/main/scala/scriptworksheet/HelloScript.scala 
Hello, Scala !!
Run Code Online (Sandbox Code Playgroud)

最后工作表是最强大的,我建议这样做是为了增加你在工作中的生产能力因为它很容易测试,就像REPL一样,它会让scla exprssions显示出来并显示你的结果

以下是官方github repo wiki关于scala工作表的摘录

工作表是在保存时评估的Scala文件,每个表达式的结果显示在程序右侧的列中.工作表就像类固醇的REPL会话一样,享受一流的编辑器支持:完成,超链接,交互式错误 - 按类型,自动格式等.

// We can define objects or classes and the worksheet
//will print the sesult of every expression
object Hello {
  def main(args:Array[String]) {
    println("Hello, Scala !!")
  }
}

println("Hello Scala")
val a = 4 + 5
Run Code Online (Sandbox Code Playgroud)

结果

defined module Hello





Hello Scala
res0: Unit = ()
a: Int = 9
Run Code Online (Sandbox Code Playgroud)

然后是一个捕获,显示您使用工作表和Intellij脚本的控制台

捕捉工作环境


Ant*_*sev 10

Scala工作表

与Scala Interpreter(REPL)相同,但在IntelliJ中运行.您可以轻松快速地评估某些表达式.检查IntelliJ融合页面以获取更多信息.

Scala脚本

如果您不想在Bash上编写脚本,可以使用Scala.这只是Scala语句序列.

例:

import java.nio.file.{Paths, Files}

val ScalaSource = "*.scala"
val Path = "path/to/necessary/folder"

val stream = Files.newDirectoryStream(Paths.get(Path), ScalaSource)

val paths = stream.iterator
while (paths.hasNext) {
  println(paths.next.getFileName)
}
Run Code Online (Sandbox Code Playgroud)

运行它:

$ scala scala_script_name.scala
Run Code Online (Sandbox Code Playgroud)

要开始使用本指南.

类和对象

Scala类的简短答案与POJO和Scala Objects 类似,它是Java Singleton类.