Я пытаюсь похудеть в своих толстых моделях, применяя принцип единственной ответственности. Я выбрасываю много общего кода в миксины, которые затем включаются в несколько классов. Однако я столкнулся с этой странной проблемой, когда локальные переменные сталкиваются с именами методов (или attr_accessors) класса, который включает миксин. Например:
module MyAwesomeMixin
def update_total
my_total = self.pricing_items.reduce(0) {|sum, x| sum + x} # this borks if the "host class" has a method called my_total=
total = my_total
end
end
Приведенный выше фрагмент кода имеет совершенно непредвиденные последствия, если «хост-класс» имеет метод с именем my_total=
. Как я могу убедиться, что переменная my_total
полностью находится в области действия метода update_total
и не имеет абсолютно никакого отношения к окружающей среде?
def my_total=(val)
, тогдаMyClass.new.update_total
не вызывает my_total. Можете ли вы дать фрагмент кода и выполнение, показывающее проблему? - person user1852994   schedule 27.12.2012total = my_total
строка бесполезна. Он создает локальную переменнуюtotal
, которая никогда не используется. - person Sergio Tulentsev   schedule 27.12.2012