scala脚本和scala应用程序之间有什么区别?请举个例子
我正在阅读的书中说,脚本必须始终以结果表达式结束,而应用程序以定义结束.遗憾的是,没有显示明确的例子
请帮我澄清一下
我认为作者的意思是,常规的scala文件需要定义一个类或一个对象才能工作/有用,你不能使用顶级表达式(因为编译文件的入口点是预先的-defined).例如:
println("foo")
object Bar {
// Some code
}
Run Code Online (Sandbox Code Playgroud)
该println语句在文件的顶层是无效的.scala,因为唯一的逻辑解释是在编译时运行它,这实际上没有意义.
相反,Scala脚本可以在顶层包含表达式,因为这些脚本在脚本运行时执行,这是有意义的.另一方面,如果Scala脚本文件仅包含定义,那么它也将是无用的,因为脚本不知道如何处理定义.但是,如果你以某种方式使用这些定义,那就再好了,例如:
object Foo {
def bar = "test"
}
println(Foo.bar)
Run Code Online (Sandbox Code Playgroud)
后者作为scala脚本有效,因为最后一个语句是使用前一个定义的表达式,而不是定义本身.
脚本的功能:
main方法,因为编译器会为您添加一个方法.Scala脚本往往对可以在单个文件中实现的较小任务有用.
另一方面,当您的项目开始变得更加复杂时,Scala应用程序更适合.它们允许将任务拆分为不同的文件和命名空间,这对于保持清晰度非常重要.
如果您编写以下脚本:
#!/usr/bin/env scala
println("foo")
Run Code Online (Sandbox Code Playgroud)
Scala 2.11.1编译器会假装(github上的源代码)你写过:
object Main {
def main(args: Array[String]): Unit =
new AnyRef {
println("foo")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2145 次 |
| 最近记录: |