Из-за синтаксического сахара методов, имена которых оканчиваются на =
, единственный способ, которым вы можете фактически передать несколько параметров в метод, - обойти синтаксический сахар и использовать send
…
h.send(:strategy=, :mystrategy, :backward )
… в этом случае вы могли бы также просто использовать обычный метод с лучшими именами:
h.set_strategy :mystrategy, :backward
Однако вы могли бы переписать ваш метод, чтобы автоматически демонтировать значения, если вызнал, что массив никогда не является допустимым для параметра:
def strategy=( value )
if value.is_a?( Array )
@strategy << value.first
@strategy.direction = value.last
else
@strategy = value
end
end
Однако это кажется мне грубым подломом.Я бы использовал имя метода, не связанного с назначением, с несколькими аргументами, если они вам нужны.
Альтернативное предложение: если единственными направлениями являются :forward
и :backward
, как насчет:
def forward_strategy=( name )
@strategy << name
@strategy.direction = :forward
end
def reverse_strategy=( name )
@strategy << name
@strategy.direction = :backward
end