Ruby中如何将each方法产出的所有元素转换为数组?
Ruby 中将带 each 方法的对象转为数组的内置方法
当然有现成的内置方法可以一行实现,常用的有两种:
使用
Array()构造方法
这是最通用的方式,只要对象实现了each方法,Array()就会自动遍历它并收集所有产出元素到数组中:array = Array(x)举个自定义对象的例子:
class MyList def each yield "foo" yield "bar" yield "baz" end end x = MyList.new array = Array(x) # => ["foo", "bar", "baz"]使用
to_a方法
如果你的对象混入了Enumerable模块(Ruby 内置的可枚举对象比如 Range、Hash 都默认包含这个模块),直接调用to_a就能转成数组:array = x.to_a比如用 Range 对象测试:
x = 1..5 array = x.to_a # => [1, 2, 3, 4, 5]注意:如果你的自定义对象只实现了
each但没混入Enumerable,to_a可能无法直接使用,这时候用Array()更稳妥。
这两种都是 Ruby 原生的内置方法,完全满足你“不用自行实现”的需求,在任何 Ruby 项目中都可以直接使用。
内容的提问来源于stack exchange,提问作者yegor256
相关产品推荐
相关产品推荐

