Я пытаюсь проверить, определяется ли метод в использовании модуля Module.method_defined?(:method)
и это возвращает false, это должно быть returing верный.
module Something
def self.another
1
end
end
Something.methods
имеет 'другого' перечисленного, но Something.method_defined?(:another)
возвраты false
.
Разве это, возможно, не работает, потому что метод определяется на сам? Если это верно, есть ли другой способ проверить, определяется ли метод на модуле кроме использования method_defined?
?
Чтобы узнать, есть ли в модуле модульный метод, можно использовать respond_to? на модуль:
Something.respond_to?(another)
=> true
method_defined? скажет, реагируют ли на данный метод ИНСТАНЦИИ класса с включенным в него модулем.
.Методы модулей определены в его метаклассе . Таким образом, можно также проверить включение метода:
k = class << Something; self; end # Retrieves the metaclass
k.method_defined?(:another) #=> true
Подробнее об этом можно прочитать в Understanding Ruby Metaclasses.
.