Звучит так, как будто вы должны присоединить параметры метода к объекту, для которого вызываете метод, и иметь метод, который обращается к ним как к переменным экземпляра.
С точки зрения простых шагов рефакторинга:
- Ввести новые переменные экземпляра, по одной на параметр метода.
- Ввести новые методы доступа для переменных экземпляра.
- Измените метод для использования переменных экземпляра, если параметры не указаны.
- Рефакторинг вызывающего кода для установки переменных экземпляра через методы доступа в некоторый момент до вызова метода.
- Измените код вызова, чтобы не передавать параметры в вызове метода.
Например, рефакторинг вызывающего кода:
</p>
<pre>
widget = Widget.new
assembly_method = widget.method(:assemble)
# Time passes...
assembly_method.call(:electric, :smooth)
</pre>
<p>
работать так:
</p>
<pre>
widget = Widget.new
widget.frombulator = :electric
widget.jazzifier = :smooth
assembly_method = widget.method(:assemble)
# Time passes...
assembly_method.call
</pre>
<p>
Это не сексуально или умно, но это приведет к коду, выражающему его намерение, и, скорее всего, это поможет решить реальную проблему, а именно, что что-то отсутствует в вашей модели.