Не существует единственного решения, которое бы работало в каждом случае, и часто передача параметров в явном виде является просто лучшим выбором, особенно когда речь идет об отладке.
Вы можете использовать переменные экземпляра, но я бы не сталввести новую переменную экземпляра по единственной причине, чтобы не пропустить ее по цепочке вызовов.Кроме того, он должен иметь собственное значение.
Один из подходов, который я часто вижу в проектах, - это хэш с одним параметром, в который добавляются новые параметры:
def foo(a)
....
bar({a:a, b:b})
end
def bar(par)
....
par[:c] = c
end
def baz(par)
par[:a]+par[:b]+par[:c]
end
Этотоже не без недостатков.Если, например, вы забыли «добавить» необходимый параметр, это либо приведет к неверным результатам, либо выдаст исключение (в зависимости от того, как их использовать), но, забыв их явно через список параметров, будет найдено уже во время компиляции..
Я бы принял решение в зависимости от длины задействованных списков параметров.Если число параметров для метода больше 5, я бы начал думать о том, может ли другой дизайн быть более подходящим.