我是 Scala 的新手,这是我第一次运行 Scala,在安装 Scala 时,我创建了一个名为 的文件Hello.scala
,内容为:
println("HelloWorld!")
当我输入时scala
,没有问题,显示了scala REPL,但是当我输入时scala Hello.scala
,它提示:
<console>:1: error: ';' expected but '.' is found.
我不知道是什么问题,我希望有人能帮助我。
我是 Scala 的新手,这是我第一次运行 Scala,在安装 Scala 时,我创建了一个名为 的文件Hello.scala
,内容为:
println("HelloWorld!")
当我输入时scala
,没有问题,显示了scala REPL,但是当我输入时scala Hello.scala
,它提示:
<console>:1: error: ';' expected but '.' is found.
我不知道是什么问题,我希望有人能帮助我。
添加-nc
标志节省了我的一天。
scala -nc Hello.scala
是什么-nc
?
-nc no compilation daemon: do not use the fsc offline compiler
是什么fsc offline compiler
?
fsc – Fast offline compiler for the Scala 2 language
来源:http ://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/tools/fsc.html
要在 REPL 中执行外部脚本(从中加载所有定义),请使用:load <filepath>
command 而不是scala <filepath>
.
» echo 'println("HelloWorld")' > Hello.scala
» scala
Welcome to Scala version 2.9.2 (OpenJDK Client VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.
// is this what you tried to do?
scala> scala Hello.scala
<console>:1: error: ';' expected but '.' found.
scala Hello.scala
// do this instead
scala> :load Hello.scala
Loading Hello.scala...
HelloWorld
scala>
您的文件Hello.scala
是一个脚本。您应该能够从命令提示符运行它scala Hello.scala
。
$ scala Hello.scala
HelloWorld!
另一方面,REPL 不适用于运行脚本。它用于直接运行 scala 代码:
scala> println("HelloWorld!")
"HelloWorld!"
如果你在 scala REPL 中执行它。你应该使用如下
:load [scala file path]
输出如下
定义的“对象名”
然后调用 main 方法作为下一个命令
objectname.main(Array())
有关更多详细信息,请参阅以下网址
https://www.scala-lang.org/documentation/getting-started.html
如果您使用某种 Unix,您可以通过在文件顶部添加pound bang指令来将 Scala 脚本作为 shell 脚本运行。
例如,在名为 的文件中键入以下内容helloarg
:
#!/bin/sh
exec scala "$0" "$@"
!#
// Say hello to the first argument
println("Hello, "+ args(0) +"!")
首字母#!/bin/sh
必须是文件中的第一行。
一旦你设置了它的执行权限:
$ chmod +x helloarg
您可以将 Scala 脚本作为 shell 脚本运行,只需说:
$ ./helloarg globe
如果您使用的是 Windows,则可以通过命名文件helloarg.bat
并将其放在脚本顶部来实现相同的效果:
::#!
@echo off
call scala % 0 % *
goto :eof
::!#
只是我所知道的总结。我曾经对如何正确运行 scala 文件感到困惑。
总之,我们有 3 种方法来实现这一目标:
对于脚本文件。对于脚本,这意味着它就像您在 REPL 中键入语句行一样,或者使用:paste
模式粘贴多行。就像是:
println("foo")
编译一个包含 main 方法的对象scalac
。您可以通过extends
App trait 轻松实现。
def main(args: Array[String]) : 单位
你可能会说“你这个骗子,只有两种方法”。但是对于第二个,我认为有太多方法可以让它运行。
scala -howtorun:object ObjectName -cp "./"
:-cp
只是为了保险。java -cp "/path/to/your/scala-jars" ObjectName
:所以区别只是需要包含类路径。在 main 函数中写下println
语句:
object HelloWorld {
def main(args: Array[String]) {
println("Hello World!")
}
}
然后执行:scala -nc HelloWorld.scala
当您尝试运行 scala 时,请按照以下步骤操作:
scala <filename.scala><Input if any>
在 cmd 提示符下使用以下是示例:
scala /home/prakash/Desktop/babyname.scala < /home/prakash/Desktop/ND
注意:上面的命令必须在 unix cmd 提示符下输入,而不是在 scala repl 中。
这适用于Mac进行开发。
#!/usr/bin/env scala -nc
println("hello");