У меня есть множество различных методов в определенном классе, которые вычисляют уникальные переменные экземпляра. Я использую attr_reader
для доступа к ним без каких-либо проблем, но теперь у меня есть десятки из них и интересно, есть ли предпочтительный/красноречивый способ доступа ко всем этим переменным экземпляра, а не только к решению, но общепринятым предпочтительным метод/стиль.Наследовать все переменные экземпляра в другой класс
Я видел похожие вопросы относительно переменных уровня класса, но этого я бы хотел избежать. Может быть, я могу сделать это с помощью модуля, но я думал, что они предназначены для хранения груды констант? Но, может быть, это то, что мне не хватает с обычным наследованием класса? Inheriting self
?
Если вы представляете себе кучу этих переменных экземпляра в виде математических констант (pi, eulers и т. Д.), Которые все добавляют к ним число (в зависимости от ввода пользователя). Я знаю, что классы и методы делают одно, что класс и метод Stack определенно делают одно: они просто хранят фрагменты данных, которые нужны многим другим классам и методам.
Пример кода, что я работаю с:
class Stack
attr_reader :pi, :euler # ... and dozens more of these
def initialize
@pi = 3.14 + 8
@euler = 0.577 + 8
# dozens more assignements here
end
end
class Overflow
def show
a = Stack.new
p a.pi # attr_reader works fine here
end
end
class AnotherClass
def some_method_that_needs_all_variables_in_Stack
# Do I need to create another instance of the
# Stack class like I did in Overflow?
# or should AnotherClass somehow inherit all the instance variables?
end
end
Overflow.new.show # => 11.14.
Спасибо!
Я согласен со всем, что вы сказали. Я попытался использовать 'pi' в качестве переменной экземпляра в своем примере, чтобы показать что-то, что вы могли бы вообразить для многих классов, которые все хотят использовать. Почему бы просто не использовать их как переменные класса? Потому что эти константы имеют короткий и уникальный расчет, сделанный для них. Поэтому почти каждый класс и метод, который я использую, используют этот набор переменных производного экземпляра. Вот почему я пытаюсь разрешить всем своим классам доступ к ним. Возможно, вы близко подошли к ответу с вашим заявлением, «сделайте их [классы] разговаривать друг с другом». - здесь будет полезен код показа. –
@TonyDiNitto Я хотел бы помочь вам, но, не глядя на ваш код, я не знаю, как его улучшить. Пожалуйста, разместите часть (не слишком длинную) своего кода, чтобы я мог получить то, что вы на самом деле пытаетесь решить. –
Thx для последующего наблюдения. Я редактировал вопрос/код, чтобы, надеюсь, выяснить, что я прошу. –