Вопрос или проблема
Я прохожу вводный курс по программированию на Scala, и мы только начали делать программы, разделенные на несколько файлов, то есть одна основная вещь или процедура на файл с общей пакетом. Я думал, что вы делаете это, просто указав “package name” в начале каждого файла, но когда я пытаюсь использовать класс из другого файла в качестве типа для другого, я получаю сообщение “не найдено”:
файл 1:
package blockbattle
case class Pos(x:Int, y:Int):
def moved(delta: (Int, Int)): Pos = Pos(x + delta(0), y + (delta(1)))
файл 2:
package blockbattle
case class KeyControl(left: String, right: String, up:String, down:String):
файл 3:
package blockbattle
case class Mole(val name: String,
var pos: Pos,
var dir: (Int, Int),
val color: java.awt.Color,
val keyControl: KeyControl
):
Я думал, что могу создавать классы в других файлах с тем же пакетом, а затем использовать их в качестве типов. У меня есть 3 файла, все с пакетом “blockbattle”, и я думал, что могу использовать типы Pos и KeyControl, которые являются именами классов, созданных в файлах 1 и 2, в качестве параметров в моем третьем файле, но я просто получаю сообщение “не найдено: Тип Pos/KeyControl”.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
----------
##
1.
Заголовок
-------
##
.
Ответ или решение
Когда вы используете классы из других файлов в Scala, которые находятся в одной и той же пакете, вы правильно определили, что необходимо указать package <name>
в начале каждого файла. Однако проблема, с которой вы столкнулись, заключается в том, что Scala не находит классы Pos
и KeyControl
, когда вы пытаетесь использовать их в третьем файле.
Вот основные шаги, чтобы устранить эту проблему:
1. Структура файлов
Убедитесь, что ваши файлы хранятся в правильной структуре папок. Если у вас есть пакет blockbattle
, структура директорий должна выглядеть следующим образом:
src/
└── blockbattle/
├── Pos.scala
├── KeyControl.scala
└── Mole.scala
Каждый .scala
файл должен находиться в папке с именем пакета, соответствующим объявленному в файле.
2. Компиляция файлов
Убедитесь, что вы компилируете все три файла одновременно, так как Scala компилятор должен видеть все файлы, чтобы разрешить зависимости между классами. Например, если вы используете команду scalac
, выполните:
scalac src/blockbattle/*.scala
Это скомпилирует все файлы в пакете blockbattle
в один шаг и позволит разрешить зависимости.
3. Убедитесь, что файлы корректны
Проверьте, что ваши файлы содержат правильно объявленные классы и не имеют синтаксических ошибок. Приведенные вами примеры выглядят корректными, но вам нужно удостовериться, что вы не пропустили никаких важных деталей. Хорошая практика — следить за отступами и правильно расставлять скобки.
4. Использование IDE
Если вы используете IDE (такие как IntelliJ IDEA), убедитесь, что проект настроен правильно и структура пакетов соответствует вашей кодовой базе. Часто IDE автоматически обрабатывает зависимые файлы, что может снизить вероятность появления ошибок.
5. Путь к исходным файлам
Если вы запускаете код из другой директории, проверьте пути к файлам. Убедитесь, что Scala-код может увидеть все необходимые файлы. Это особенно важно, если вы используете IDE или специальные скрипты для запуска.
Заключение
Как только вы выполните вышеуказанные действия, вы должны были устранить ошибку "not found: Type Pos/KeyControl". Убедитесь, что все классы находятся в одной директории и что компиляция выполняется на всех файлах одновременно. Если проблемы сохраняются, внимательно проверьте код на наличие опечаток или неправильного синтаксиса.
Такое комментирование и структурирование вашего кода поможет не только избежать ошибок, но и улучшить читаемость и поддержку вашего проекта в будущем.