scala脚本和scala应用程序有什么区别?请提供一个例子
我正在阅读的书中说,脚本必须始终以结果表达式结束,而应用程序以定义结束。不幸的是,没有显示明确的例子。
请帮我澄清一下
答案 0 :(得分:6)
我认为作者的意思是,常规的scala文件需要定义一个类或一个对象才能工作/有用,你不能使用顶级表达式(因为编译的入口点)文件是预先定义的)。例如:
println("foo")
object Bar {
// Some code
}
println
语句在.scala
文件的顶层无效,因为唯一的逻辑解释是在编译时运行它,这实际上没有用。
object Foo {
def bar = "test"
}
println(Foo.bar)
后者作为scala脚本有效,因为最后一个语句是使用前一个定义的表达式,而不是定义本身。
答案 1 :(得分:5)
脚本的功能:
main
方法,因为编译器会为您添加一个。Scala脚本对于可在单个文件中实现的较小任务有用。
另一方面,Scala应用程序在您的项目开始变得更加复杂时更适合。它们允许将任务拆分为不同的文件和命名空间,这对于保持清晰度非常重要。
如果您编写以下脚本:
#!/usr/bin/env scala
println("foo")
Scala 2.11.1编译器会伪装(source on github)你写的:
object Main {
def main(args: Array[String]): Unit =
new AnyRef {
println("foo")
}
}
答案 2 :(得分:0)
好吧,我一直认为这是一个Scala脚本:
$ cat script
#!/usr/bin/scala
!#
println("Hello, World!")
用简单的方式运行:
$ ./script
另一方面,应用程序必须编译为.class
并使用java
运行时显式执行。