Scala - 函数和闭包(第8章,Odersky等,2010)

时间:2018-01-21 21:22:07

标签: scala function

我是Scala的新手。我创建了一个名为" LongLines.scala"在IntelliJ中使用代码清单8.1(见下图)。

问题:如果我将FindLongLines对象放入相同的" LongLines.scala"脚本,终端输出:

$ scala FindLongLines 45 LongLines.scala
No such file or class on classpath: FindLongLines

问题:我在哪里放置" FindLongLines"对象,以便运行代码并获得绿色的结果?

enter image description here

1 个答案:

答案 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是已编译类的名称,42arg(0)LongLines.scalaarg(1)传递给main FindLongLines。 这大致对应javac Foo.java + java Foo

以脚本运行

由于您的所有代码都在一个文件中,因此您也可以将其作为脚本运行:

scala LongLines.scala 42 LongLines.scala

此处,LongLines.scala是要运行的脚本的名称,42和第二个LongLines.scala作为arg(0)arg(1)传递给主要方法

两种变体都应该产生相同的结果。