Я недавно просматривал некоторый код и наткнулся на что-то вроде этого:
class A
@@container = {}
def self.register(a, b)
@@container[a] = b
end
def self.get(a)
@@contaienr[a]
end
end
class BRunner < A
A.register(D, self)
def self.run
#...
end
end
class CRunner < A
A.register(E, self)
def self.run
#...
end
end
class C
def self.call
[D, E].each do |item|
A.get(item).run()
end
end
end
BRunner
и CRunner
вызывают register
, когда их соответствующие блоки определения класса выполняются во время выполнения.Затем, когда класс C
запускается явно, он вызывает то, на что отображаются D
и E
, и вызывает функцию run
. Это не кажется правильным, потому что для меня это не совсем понятный код.Это Ruby или просто плохое программирование?