Первое, что вы можете сделать, это записать логику unless
в одну строку:
bars = bar_or_bars.is_a?(Array) ? bar_or_bars : [bar_or_bars]
Как видите, я даю ему новое имя здесь, так как оно больше не является полосой или полосойтеперь это определенно коллекция.
Проблема с этим и вашим оригинальным подходом заключается в том, что хотя ваша функция может работать на любом Enumerable
, вы заставите своих пользователей дать вам аргумент определенного типа, который* * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.Это на самом деле пахнет как плохой дизайн API.Вероятно, вам лучше принять несколько аргументов, например:
def foo(*bars)
bars.each { |baz| ... }
end
И пусть вызывающий решит, хочет ли он передать один объект или массив:
foo("XYZ")
ary = ["abc", "def"]
foo(*ary)