Как заставить компилятор Scala сообщить мне, когда мой класс является абстрактным? - PullRequest
1 голос
/ 22 июня 2011

Почему ключевое слово "abstract" для определения класса является необязательным в Scala и как заставить компилятор Scala сообщать мне, когда мой класс является абстрактным?

Вот пример, который я написал в Eclipse:

class Toto[T] {
    def get(index: Int): T
}

object Toto {
    def create[T]: Toto[T] = new Toto[T]
}

Кажется, это совершенно правильное определение класса в Scala, хотя оно НЕ определяет требуемый метод get и НЕ имеет префикса с абстрактным. Если вам не нужно абстрактное ключевое слово, то почему оно существует? И если вы хотите, чтобы вам сказали, что ваш класс на самом деле абстрактный, как вы можете заставить компилятор сообщать вам?

Ответы [ 2 ]

4 голосов
/ 22 июня 2011

Это недопустимый код scala, требуется аннотация и запрещено создание экземпляров. От спецификации (5.2, p63):

Модификатор abstract используется в классе определения. Это избыточно для черты характера и обязательны для всех остальных классы, которые имеют неполных членов. Абстрактные классы не могут быть экземпляр (§6.10) с вызов конструктора, если с последующим миксином и / или уточнением которые переопределяют все незавершенные члены класса. Только абстрактные классы и черты могут иметь абстрактный термин члены.

Код выдает ошибку в REPL: error: class Toto needs to be abstract, since method get is not defined

Я получаю правильное поведение с тем же сообщением в Eclipse. Вы должны проверить, получаете ли вы ту же ошибку с затмением и без него. Как бы то ни было, я думаю, что если у вас есть именно тот код, который вы выложили без ошибок (он запускается?), Сообщение об ошибке будет гарантировано.

2 голосов
/ 22 июня 2011

Чтобы ответить на мой собственный вопрос: В Eclipse , вы можете только сказать, является ли класс правильным, если все другие классы компилируются без ошибок! Другими словами, вы не можете доверятьЧто-нибудь, что Eclipse говорит о классе, если нет ошибок в других классах.

Так что, если у вас есть ошибки в нескольких классах , тогда нет способа узнать, какие из них являются настоящими ошибками,и ни один, если класс без ошибок является правильным.

Вам просто нужно многократно повторять ошибки, исправляя те, которые имеют смысл, и надеясь, что другие ошибки, которые не имеют смысла, в конечном итоге просто исчезнут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...