Переименование файла .scala в среде Scala IDE не приводит к переименованию класса.

Когда я переименовываю файл .scala через Eclipse, само имя класса не переименовывается.

Это ожидаемое поведение? Вроде ничего не ломается.

Я ожидаю, что он будет переименован, исходя из фона Java, имя файла/имя класса должны совпадать друг с другом.


person user701254    schedule 18.12.2012    source источник
comment
SO не является средством отслеживания проблем!   -  person ziggystar    schedule 18.12.2012


Ответы (3)


соответствие между именем класса и именем файла в scala не требуется. Вы можете (и обычно делаете) определить несколько типов в каждом файле scala. Компилятор попытается создать отдельный файл .class для каждого общедоступного типа с именем файла, соответствующим имени типа, для взаимодействия с java (для сложных или вложенных типов, которые не имеют прямого соответствия в java, scalac создаст файлы . class файлы со странными/искаженными именами...)

Несколько замечаний о том, почему это соответствие не соблюдается (вероятно, не полный список, но просто для того, чтобы дать вам представление):

  1. это было бы расточительно, учитывая краткость scala. case class Foo(foo:String) соответствует полному и несколько сложному классу Java, но иметь его в собственном файле кажется расточительным...
  2. это ухудшит читаемость кода. Иногда вы определяете иерархию классов дел, которые соответствуют (например) различным сообщениям, которые вы отправляете актеру. То, что они вместе, подчеркивает их намерения.
  3. часто это было бы бессмысленно. Относительно простое определение в scala, такое как trait Fooer {def foo="foo"}, может быть переведено в различные java-подобные типы, которые реализуют природу типажа "интерфейс с реализацией по умолчанию". Ситуация усугубляется для вложенных объектов/классов/типов, разрешенных синтаксисом scala и используемых в некоторых распространенных шаблонах scala.
  4. существует семантика Scala (в частности, запечатанные черты), которая на самом деле требует наличия нескольких классов, определенных в одном файле (кредит на комментарий @DaveGriffith ниже)
person Paolo Falabella    schedule 18.12.2012
comment
Кроме того, существует семантика Scala (в частности, запечатанные трейты), которая фактически требует наличия нескольких классов, определенных в одном файле. - person Dave Griffith; 18.12.2012

В scala файл .scala может содержать множество (общедоступных) классов или пакетов.

person Jan    schedule 18.12.2012

Имя файла в scala не обязательно должно совпадать ни с одним из имен классов в файле. Вы можете иметь столько классов, сколько хотите в файле scala. Структура пакета также не обязательно должна совпадать со структурой папок, хотя ее рекомендуется выровнять.

person Ido Tamir    schedule 18.12.2012