我是Scala的新手。我创建了一个名为" LongLines.scala"在IntelliJ中使用代码清单8.1(见下图)。
问题:如果我将FindLongLines对象放入相同的" LongLines.scala"脚本,终端输出:
$ scala FindLongLines 45 LongLines.scala
No such file or class on classpath: FindLongLines
问题:我在哪里放置" FindLongLines"对象,以便运行代码并获得绿色的结果?
答案 0 :(得分:2)
假设这是名为LongLines.scala
的文件的内容:
import scala.io.Source
object LongLines {
def processFile(filename: String, width: Int) {
val source = Source.fromFile(filename)
for(line <- source.getLines())
processLine(filename, width, line)
}
private def processLine(filename: String, width: Int, line: String) {
if (line.length > width)
println(filename +": " + line.trim)
}
}
object FindLongLines {
def main(args: Array[String]) {
val width = args(0).toInt
for (arg <- args.drop(1))
LongLines.processFile(arg, width)
}
}
您可以通过多种方式调用它
第一个选项:编译然后运行
首先必须调用编译器:
scalac LongLines.scala
这将在当前目录中生成一堆.class
个文件。一个这样的文件将被称为FindLongLines.class
。现在你可以调用
scala FindLongLines 42 LongLines.scala
此处,FindLongLines
是已编译类的名称,42
为arg(0)
,LongLines.scala
为arg(1)
传递给main
FindLongLines
。
这大致对应javac Foo.java
+ java Foo
以脚本运行
由于您的所有代码都在一个文件中,因此您也可以将其作为脚本运行:
scala LongLines.scala 42 LongLines.scala
此处,LongLines.scala
是要运行的脚本的名称,42
和第二个LongLines.scala
作为arg(0)
和arg(1)
传递给主要方法
两种变体都应该产生相同的结果。