#scala
#scala
Вопрос:
Я новичок в Scala, следую руководству по чтению файлов. Предполагается, что код будет печатать построчно из текстового файла, не видя никаких выходных данных в консоли IntelliJ.
Я пробовал другие примеры кода и могу видеть вывод программы, но только этот файловый модуль ничего не показывает.
import scala.io.Source._
object readfile extends App {
println("hello")
val filename = "src/rainbow.txt"
for(line <- fromFile(filename).getLines()) {
println(line)
}
println(filename)
}
Ответ №1:
Похоже, вы работаете на листе Intellij (или блокноте, как его теперь называют). Если это так, то проблема в том, что ваш object
extends App
, который обертывает код вашего объекта в скрытый main()
метод.
Есть три простых способа выполнить код и увидеть результат.
1 — Вызвать main()
после определения readfile
объекта.
readfile.main(Array())
2 — Извлеките extends App
и затем вызовите (ссылка) readfile
после его определения.
3 — Полностью удалите object
оболочку и позвольте Intellij запускать код напрямую.
import scala.io.Source._
println("hello")
val filename = "src/rainbow.txt"
for(line <- fromFile(filename).getLines()) {
println(line)
}
println(filename)
Комментарии:
1. Все 3 подхода работают как минимум с ошибками. Спасибо. Q1. является ли это скрытым основным, как
public static void main in java?
Q2. #1 и # 2 и # 3 выбрасываетjava.io.FileNotFoundException
из-за ошибки path, я попробовал обаrainbow.txt
иsrc/rainbow.txt
2. A1. Да. A2. Текущий рабочий каталог для scratch pad IntelliJ — это каталог, из которого был запущен IntelliJ. (В моем случае это
$HOME
.) Вы также могли бы попробовать абсолютный путь к входному файлу.3. Я понимаю. кое-что в сторону, если вы не возражаете ответить, я предполагаю, что
object
создается экземпляр из моего примера иclass
является чертежом в scala. итак, если это верно, то в контексте A1,public static void main
это статический метод, который вызывается без создания объекта. В противном случае, пожалуйста, просветите меня.4. В Scala нет
static
. То, что у него есть, — этоobject
s, которые можно рассматривать какclass
с гарантированным экземпляром singleton. Как и Java, скомпилированному байт-коду нужна запись или начальная точка. В Scala этоmain()
метод вobject
, и он вызывается, когда операционная система загружает и выполняет программу. Для получения более подробной информации проведите некоторое исследование / почитайте. Это немного выходит за рамки комментариев SO.