Noob вопрос. Я запустил RubyMine's Code Inspect в файле, содержащем этот класс.Осмотр Предупреждение: Не удается найти декларацию для поля
class Square
attr_accessor :width
def area
@width * @width
end
end
Я был удивлен, чтобы получить два предупреждения на линии @width * @width
:
Cannot find declaration for field '@width'
attr section of the Style Guide не было полезно для меня. Почему это предупреждение?
---- Редактировать ----
Ruby-Doc говорит это о attr-accessor
Определяет именованный атрибут для этого модуля, где имя является символом .
id2name
, создавая переменную экземпляра (@name
) и соответствующий метод доступа для ее чтения. Также создается способ, называемыйname=
для установки атрибута. Строковые аргументы преобразуются в символы.
Для меня «Определяет» означает, что у него есть «объявление». Предупреждающее сообщение не имеет смысла. «Предупреждение: поле не может быть инициализировано перед использованием» более точно.
Я думаю, что это проблема RubyMine (если это вообще проблема). RubyMine apparently uses its own code inspection protocol и не использует стандартный Linter.
Согласитесь об инициализации. Но мне кажется, что 'attr_accessor: width' является объявлением. –
'' attr_accessor'' является ярлыком для двух методов, которые устанавливают и получают ширину. ('' def width, @width; end'' и '' def width = (width); @width = width; end''). Однако, с самого первого чтения (без написания), это будет nil, поэтому я думаю, что Rubymine возвращает ошибку (я никогда не использовал Rubymine, поэтому не могу точно прокомментировать ошибку). Я предполагаю, что это не рассматривается как декларация, поскольку они не являются переменными, а методами. –
Я смотрю на ruby-doc.com для официальной информации, тогда я попытаюсь выяснить, использует ли RubyMine Linter, например 'rubocop'. –