Ответ 1
Методы класса в Ruby действительно не существуют, это всего лишь одноэлементные методы объекта класса. Одиночные методы на самом деле не существуют, они просто обычные методы экземпляра класса Singleton класса.
Поскольку вы уже знаете, как определить методы экземпляра (используя Module#define_method
), вы уже знаете все, что вам нужно знать. Вам просто нужно вызвать class_eval
в C
singleton class вместо C
:
(class << C; self end).class_eval do
define_method(:a_class_method) do
puts var
end
end
В текущих версиях Ruby есть метод singleton_class
, чтобы сделать это проще:
C.singleton_class.class_eval do
define_method(:a_class_method) do
puts var
end
end
Но на самом деле текущие версии Ruby также имеют Module#define_singleton_method
, поэтому в этом конкретном случае это необязательно:
C.define_singleton_method(:a_class_method) do
puts var
end