Методы класса на самом деле не существуют в Ruby, они просто одноэлементные методы объекта класса. Синглтон-методы на самом деле тоже не существуют, они просто обычные методы экземпляра синглтон-класса объекта.
Поскольку вы уже знаете, как определять методы экземпляра (используя Module#define_method
), вы уже знаете все, что вам нужно знать. Вам просто нужно вызвать class_eval
на синглтон-классе C
вместо 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