При компиляции заведомо ошибочного кода Scala, подразумевающего отсутствие модификатора open, мой компилятор не выдает никаких предупреждений или ошибок. Кажется, это противоречит этой строке в книге Scala:
В Scala 3 расширение неабстрактных классов в других файлах ограничено. Чтобы это сделать, базовый класс должен быть помечен как открытый.
Вот мой код:
животное.скала
package animal:
class Animal(name: String, specie: String):
override def toString: String = s"$name of specie $specie"
def doNoise: Unit = println("I could be anyone, really.")
кот.скала
import animal.Animal
class Cat(name: String) extends Animal(name, "cat"):
override def doNoise: Unit = println("Meow.")
@main def run(): Unit =
val c = Cat("felix")
println(c)
c.doNoise
Я запускаю scalac *.scala, чтобы скомпилировать все, что работает нормально, хотя Cat и Animal не определены в одном файле и Animal не помечены как open. Я что-то пропустил ?
Заранее спасибо за вашу помощь :)
P.S.
Когда я набираю scala в командной строке, меня приветствует Welcome to Scala 3.4.2.
Я думаю, что предупреждение по-прежнему не выдается по умолчанию (начиная с версии 3.4). См. обсуждение «Специальные расширения».





От самого Одерского:
он должен появиться в версии 3.6 позднее в этом году. Он уже включен в
-source future.
openтак и не было реализовано, не так ли? А если и было, то сейчас это в основном документация, поскольку для обеспечения кросс-компиляции семантикуpublicпо умолчанию нельзя изменить.