vps网站无法通过ip访问,上海建设协会网站,网站定制开发前期要有一定的规划,中英网站模板如何正确地写出Scala的第一个程序#xff0c;并且利用Scala3的简洁特性#xff1f;
在解释器中直接输出Hello world非常简单#xff0c;只需要直接执行即可#xff1a;
scala println(Hello World)
Hello World
但如果我们希望编写一个脚本文件#xf…如何正确地写出Scala的第一个程序并且利用Scala3的简洁特性
在解释器中直接输出Hello world非常简单只需要直接执行即可
scala println(Hello World)
Hello World
但如果我们希望编写一个脚本文件编译后执行再输出Hello World却会踩到很多的坑。
错误的尝试1
方案来源书籍敏捷硬件开发语言Chisel与数字系统设计
博客如何运行scala脚本 | 我的站点
首先创建一个.scala文件
vim hello.scala
在这个文件中编写如下代码
println(Hello World!)
然后执行编译指令
scala hello.scala
之后他们说这样就可以成功输出Hello world。然而除了报错你什么都得不到
jiaJ-MateBookEGo:~/scala_test$ scalac hello.scala
-- [E103] Syntax Error: hello.scala:1:0 ----------------------------------------
1 |println(Hello, World!)|^^^^^^^|Illegal start of toplevel definition|| longer explanation available when compiling with -explain
1 error found
并不错误但不太好的尝试2
经过查找资料我找到了CSDN的一篇博客里面记录了Scala的第一个程序包括网上的课程也是这样讲的地址第一个Scala程序——Hello World!_scala hello world-CSDN博客
注意他这里没有写等号实际上没有写等号也会报错等号必须写另外这里必须是object不可以是class原因和Scala使用了JVM有关这里不多赘述
object HelloWorld {def main(args: Array[String]) {println(Hello, world!)}
}之后进行编译
jiaJ-MateBookEGo:~/scala_test$ scala hello.scala
Compiling project (Scala 3.6.2, JVM (21))
Compiled project (Scala 3.6.2, JVM (21))
Hello, world!
这里使用scala或者scalac都可以编译成功只不过使用scala会自动执行。
成功的步骤
这样我们能够成功输出Hello world但书中和博客应该并非空穴来风直接编写简洁的函数能否实现功能答案是可以。我们查询官网Hello, World! | Scala 3 — Book | Scala Documentation
官网说明Scala2的第一个程序应该这样写
object hello {def main(args: Array[String]) {println(Hello, World!)}
}
官网的解释代码中在名为 hello 的 Scala object 中我们定义了一个名称为 main 的方法。 在 Scala 中 object 类似 class但定义了一个可以传递的单例实例。 main 用名为 args 的输入参数该参数必须是 Array[String] 类型暂时忽略 args。
这和我们上面写的是一致的但对于Scala3有着更简明的写法
main def hello() println(Hello, World!)
这个main写不写都可以并不影响但必须用def定义。官网解释如下代码中 hello 是方法。 它使用 def 定义并用 main 注释的手段把它声明为“main”方法。 使用 println 方法它在标准输出 STDOUT中打印了 Hello, world! 字符串。
这里直接使用scala编译并运行
jiaJ-MateBookEGo:~/scala_test$ scala hello.scala
Compiling project (Scala 3.6.2, JVM (21))
Compiled project (Scala 3.6.2, JVM (21))
Hello, World!
没问题成功运行了。但官网使用的是scalac他要求我们使用以下两条指令编译并运行
scalac Hello.scala
scala hello
事实上它又报错了
jiaJ-MateBookEGo:~/scala_test$ scalac hello.scala
jiaJ-MateBookEGo:~/scala_test$ scala hello
[error] hello is not a scala sub-command and it is not a valid path to an input file or directory.
Try viewing the relevant help to see the list of available sub-commands and options.scala --help
不是哥们你官网写的文档也是错的是什么意思没办法我们只能继续搜索这个报错在github上找到了解答Document starting programs compiled by scalac in the current working directory · Issue #3132 · VirtusLab/scala-cli · GitHub
其中的意思大概翻译一些就是这种写法已经不被支持了我们早就已经讨论在新的标准中不支持它。
不支持可以啊那你官网怎么还放着以前的版本这也太草率了吧只能说默认学这门语言的不是小白吧。。。。。。
解决方案就是不能直接使用scala hello执行这个脚本而需要使用这两条指令中的任意一条
scala run -cp .
scala run -cp . -M hello
第一条指令运行失败第二条运行成功。
jiaJ-MateBookEGo:~/scala_test$ scala run -cp .
[error] Found several main classes: hello, hello, hello
You can run one of them by passing it with the --main-class option, e.g.scala run -cp . --main-class helloYou can pick the main class interactively by passing the --interactive option.scala run -cp . --interactive
jiaJ-MateBookEGo:~/scala_test$ scala run -cp . -M hello
Hello, World!
总结
成功的运行方式如下
脚本代码
main def hello() println(Hello, World!)
编译指令
scala hello.scala
或者
scalac hello.scala
scala run -cp . -M hello