Ruby - вызов методов в определении класса - PullRequest
0 голосов
/ 30 ноября 2018

Я недавно просматривал некоторый код и наткнулся на что-то вроде этого:

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 или просто плохое программирование?

1 Ответ

0 голосов
/ 02 декабря 2018

Ваш пример, хотя он и является кодом Ruby, похоже, не является шаблоном проектирования, специфичным для Ruby.Я подозреваю, что это шаблон проектирования программного обеспечения, созданный для этой кодовой базы.

Без контекста фактической базы кода трудно сказать, является ли она слишком абстрактной или "плохой", но, вероятно, есть место для улучшения даже в небольшом приведенном вами примере.

Вы можете найтипримеры общих шаблонов разработки программного обеспечения, написанных на Ruby для сравнения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...