У меня есть модуль, который хочет использовать данные, предоставленные классом, который их включил, - но на уровне класса, а не на уровне экземпляра.
цель состоит в том, чтобы предоставить метаданные класса модулю, который включен в этот класс, чтобы модуль мог использовать метаданные во время включенного вызова.
это работает:
module Bar
def value
@value
end
def baz
puts "the value is: #{value}"
end
end
module Foo
def self.included(mod)
mod.extend(Bar)
mod.baz
end
end
class MyClass
@value = "my class defined this"
include Foo
end
вывод этого кода
the value is: my class defined this
Я не уверен, является ли использование @value
хорошим или нет ... Мне кажется странным, что я требую, чтобы это было установлено до того, как include Foo
произойдет, а не с технической точки зрения (я знаю, почему это необходимо сделать в этом порядке), но с точки зрения идиоматичности или удобства использования.
... есть ли лучший способ / более идиоматический способ сделать это?