最近我偶然发现了“ Ruby #3 中的风格元素:确保某物是一个数组”。
TL;DR:Array()
Ruby 中的方法将您放入的任何内容转换为数组,并尝试猜测正确的结果应该是什么:
Array(1) # => [1]
Array([1,2]) # => [1,2]
Array(nil) # => []
那么Array({a: :b})
返回什么?我假设它返回一个以哈希为值的数组:[{a: :b}]
。
但是,哈希直接转换为数组:[:a, :b]
。
我不只是想将哈希放入数组([{a: :b}]
)中。无论我放入什么,我都希望具有返回数组的功能。Array()
已经这样做了,但是它以我不期望的方式将哈希转换为数组。
所以,基本上功能应该是这样的:
NewFancyArrayMethod({a: :b}) # => [{a: :b}]
NewFancyArrayMethod([{a: :b}, {c: :d}]) # => [{a: :b}, {c: :d}]
第二部分已经由 完成Array()
。
我知道我可以做类似的事情values = [values] unless values.is_a? Array
,就像文章指出的那样。但是,我宁愿有一种方法可以像Array()
已经做的那样从我那里抽象出这种转换。唯一的问题是Array()
对哈希的处理不同于任何其他“单个”值(字符串、整数、对象等)。我只是不希望对不同的情况进行不同的处理。