Почему не делает Модуля method_defined? (: метод), работают правильно?

Я пытаюсь проверить, определяется ли метод в использовании модуля Module.method_defined?(:method) и это возвращает false, это должно быть returing верный.

module Something
  def self.another
    1
  end
end

Something.methods имеет 'другого' перечисленного, но Something.method_defined?(:another) возвраты false.

Разве это, возможно, не работает, потому что метод определяется на сам? Если это верно, есть ли другой способ проверить, определяется ли метод на модуле кроме использования method_defined??

11
задан John Duff 31 December 2009 в 03:54
поделиться

2 ответа

Чтобы узнать, есть ли в модуле модульный метод, можно использовать respond_to? на модуль:

Something.respond_to?(another)
=> true

method_defined? скажет, реагируют ли на данный метод ИНСТАНЦИИ класса с включенным в него модулем.

.
12
ответ дан 3 December 2019 в 06:21
поделиться

Методы модулей определены в его метаклассе . Таким образом, можно также проверить включение метода:

k = class << Something; self; end # Retrieves the metaclass
k.method_defined?(:another)  #=> true

Подробнее об этом можно прочитать в Understanding Ruby Metaclasses.

.
6
ответ дан 3 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: