我是斯卡拉的新人。
我想运行在我的文件while.scala
写的函数:
def whileLoop {
var i = 1
while(i <= 3) {
println(i)
i += 1
}
}
whileLoop
这是它如何看待REPL:
scala> scala /home/nazar/Downloads/while.scala
<console>:1: error: illegal start of simple expression
如果我从书中理解的话。我需要指定.scala
文件位置并运行:
scala /path/to/file.scala
为什么会失败?
以下是本书的摘录:
You can run the code like this:
batate$ scala code/scala/while.scala
1
2
3
更新
我尝试了:load
选项,但是当我想运行另一个文件for_loop.scala
时:
def forLoop {
println( "for loop using Java-style iteration" )
for(i <- 0 until args.length) {
println(args(i))
}
}
forLoop
失败了:
scala> :load /home/nazar/Downloads/for_loop.scala
Loading /home/nazar/Downloads/for_loop.scala...
<console>:9: error: not found: value args
for(i <- 0 until args.length) {
^
<console>:8: error: not found: value forLoop
forLoop
^
scala> :load /home/nazar/Downloads/for_loop.scala hello scala
That file does not exist
如何解决这个问题?
答案 0 :(得分:5)
你这样做,从shell /命令行,而不是在REPL中(%
是名义shell提示符):
% scala MyScalaScriptName.scala
你这样做了:
% scala
scala> scala while.scala
<console>:1: error: illegal start of simple expression
Scala REPL中唯一已知的是Scala代码本身和一些内置的特殊命令。但是,其中一个会做你想做的事:
% cd
% scala
scala> :load Downloads/while.scala
Loading Downloads/while.scala
1
2
3
答案 1 :(得分:2)
为了使用命令行参数(通过args
),需要扩展App
或更常见的来定义主体或 main 对象中的方法,即def main(args: Array[String])
方法,它定义程序的入口点。例如,考虑
object AnyName extends App {
def forLoop {
println( "for loop using Java-style iteration" )
for(i <- 0 until args.length) {
println(args(i))
}
}
forLoop
}
AnyName.main(Array("first","second"))
尝试从REPL加载它。另一种方法是,
object AnyName {
def main(args: Array[String]) {
println( "for loop using Java-style iteration" )
for(i <- 0 until args.length) {
println(args(i))
}
}
}
AnyName.main(Array("first","second"))
在后一个示例中,请注意args的范围,绑定到main
中的参数。