Созданный одноэлементный объект не может быть обнаружен в основной функции (Scala) - PullRequest
0 голосов
/ 09 ноября 2018

Синглтон объект LongLines, который я создал, не может быть распознан в объекте с основной функцией (FindingLines). Я помещаю их файлы (LongLines.scala, FindingLines.scala) в каталог / src / main / scala / com / files / lines. Программный код должен найти в конкретном файле строки, длина которых превышает параметр width .

Коды:

1) LongLines.scala (версия из книги, которую я изучаю):

package com.files.lines
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)
    }
}

2) LongLines.scala (моя собственная версия):

package com.files.lines
import scala.io.Source._
import java.nio.files.Paths._

object LongLines {

   def processFile(filePath: String, width:Int): Unit = {
      val path = get(filePath)
      val fileName = path.getFileName.toString
      val lines = fromFile(filePath).getLines().toList
      for (line<-lines) processLines(fileName,line,width)
   }

   private def processLines(fileName: String, line: String, width: Int): Unit = {
      if (line.length() > width) println(s"$fileName: $line");
   } 
}

3) FindingLines.scala (версия книги, которую я использовал - только версия):

package com.files.lines    

object FindLongLines {

  def main(args: Array[String]) = {
    val width = args(0).toInt
    for (arg <- args.drop(1))
        LongLines.processFile(arg, width)
 } 

}


Ошибка (скомпилирована из терминала linux):

После того, как я скомпилировал программу с моей версией и книжной версией LongLines.scala (отдельно, конечно):

  scalac FindingLines.scala 

У меня есть эта ошибка:

FindLongLines.scala:15: error: not found: value LongLines
        LongLines.processFile(arg, width)
        ^
one error found

1 Ответ

0 голосов
/ 11 ноября 2018

Решение:

1) I removed "package com.file.lines" from both files (FindingLines.scala, LongLines.scala) - that means I need not to remove those files in this package (directory). Those two files could stay in src/main/scala directory.
2) scalac FindingLines.scala LongLines.scala
3) scala FindingLines.scala 45 ~/workspace/Rational/src/Rational.scala
...