Связывание данных + Добавление дополнительной информации

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

Скажем, если я привязываю данные к текстовому полю, и мои данные были определенным числом «123», но я хотел, чтобы текстовое поле отображало «Data: 123». Без добавления этой дополнительной информации «Данные:» к возвращаемым данным в самом объекте, конец класса B "hello" А вот с модулями это ...

Когда классы наследуются в Ruby, одноэлементные классы также наследуются:

class A
  def self.hello
    puts "hello"
  end
end

class B < A
end

B.hello #=> "hello"

Однако с модулями это не так:

module M
  def self.goodbye
    puts "goodbye"
  end
end

class A
  include M
end

A.goodbye #=> NameError

] Чтобы обойти это ограничение, многие люди прибегают к этой уродливой хитрости:

module M
  def self.included(c)
    c.extend ClassMethods
  end

  module ClassMethods
    def goodbye
      puts "goodbye"
    end
  end
end

Итак, мой вопрос: есть ли теоретическая / концептуальная причина этого ограничения на модули? Или это была всего лишь сложность реализации?

Посмотрев исходный код C (YARV / MRI), я могу определить, что есть трудность реализации (не непреодолимая, но все же одна), но является ли это единственной причиной? Есть ли другие причины для этого ограничения?

спасибо

9
задан Andrew Grimm 3 October 2010 в 08:07
поделиться