используя способ отсутствует для сокращения кода в Ruby


У меня есть набор методов класса, который :

class << self
def increment_value
  self.first.increment_value
end

def max_work_hours_per_day
  self.first.max_work_hours_per_day
end

def fast_completion_day
  self.first.fast_completion_day
end

def super_fast_completion_day
  self.first.super_fast_completion_day
end

def ludicrous_completion_day
  self.first.ludicrous_completion_day
end

def budget_completion_day
  self.first.budget_completion_day
end
end

Поскольку все методы вызова самостоятельно.во-первых.atttibute где атрибута является имя функции. Я думаю, что мы можем свести это к одному методу. Что-то вроде и method_missing в Ruby , но так как я не очень хорош в мета-программирования , я советую здесь.



489
7
задан 20 августа 2011 в 03:08 Источник Поделиться
Комментарии
1 ответ

Руби уже есть модуль, который позволяет пересылать конкретные методы данного объекта в его стандартной библиотеки: в Forwardable модуль.

С его помощью вы можете написать код вроде этого:

class << self
extend Forwardable

def_delegators :first, :increment_value, :max_work_hours_per_day #...
end

Я думаю, изложением методов, которые вы хотите вперед, как это лучше, чем просто экспедирование все это не случайно вперед то, что вы не хотите вперед. Он также не влияет на сообщения об ошибке при вызове метода, который не существует.

13
ответ дан 23 августа 2011 в 10:08 Источник Поделиться