Рубокоп дает мне следующую обиду
lib/daru/vector.rb:1182:5: C: Style/MethodMissing: When using method_missing, define respond_to_missing? and fall back on super.
def method_missing(name, *args, &block) ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Отсутствующий метод определяется как:
def method_missing(name, *args, &block)
if name =~ /(.+)\=/
self[$1.to_sym] = args[0]
elsif has_index?(name)
self[name]
else
super(name, *args, &block)
end
end
Я попытался исправить это с помощью приведенного ниже кода, увидев пример из здесь а>
def respond_to_missing?(method_name, include_private=false)
(name =~ /(.+)\=/) || has_index?(name) || super
end
Но теперь Рубокоп дает мне следующую обиду:
lib/daru/vector.rb:1182:5: C: Style/MethodMissing: When using method_missing, fall back on super.
def method_missing(name, *args, &block) ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Я не могу понять, что не так. Как видите, я возвращаюсь к super в блоке else.
# rubocop:disable Style/MethodMissing
перед строкой с оскорблением и# rubocop:enable Style/MethodMissing
сразу после. Рубокоп всего лишь полицейский, и он может ошибаться. - person Aleksei Matiushkin   schedule 27.07.2016super
без списка аргументов. Это не имеет никакого отношения к вашей проблеме, которая, по-видимому, заключается в том, что Rubocop просто не в состоянии увидеть, что есть путь, который ведет к вызовуsuper
(помните, статический анализ почти всего, даже отдаленно интересного, эквивалентен решению проблемы остановки). Проблема, и Ruby не совсем предназначен для легкого статического анализа, к тому же). Или, может быть, он действительно затыкает его. - person Jörg W Mittag   schedule 27.07.2016