我有一堆函数接受对象数组,或设计为被视为包含一个对象的数组的单个对象,我正在寻找一种更简洁的方法来实现这一点。基本上,我想知道如何使以下函数中的 unless
部分更简洁:
def foo(bar_or_bars)
unless bar_or_bars.is_a?(Array)
bar_or_bars = [bar_or_bars]
end
bar_or_bars.each { |baz| ... }
end
任何帮助将不胜感激!谢谢。
最佳答案
最简单的解决方案是使用内核方法 Array :
Array(5) #=> [5]
Array([1, 2, 3]) #=> [1,2,3]
所以
def foo(bar_or_bars)
Array(bar_or_bars).each { |bar| ... }
这甚至适用于以数组作为元素的嵌套数组(它们不会被展平)。
Hashes 不适用于此方法的一种情况:
Array(a: 1, b: 2) #=> [[:a, 1], [:b, 2]]
如果您想遍历未更改的 Hash 对象,最好使用 Array.wrap来自 ActiveSupport。
关于ruby - 接受参数作为单个对象或对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475767/