我怎么做下面这样的事情?
[ 'foo' ['bar','baz'],[ 'one',['two','three'] ] ].each { |word| puts word } # I want this to return: foo bar baz one two three
解决方法
如果您不想展平阵列并仍然可以实现所需的功能,您可以执行以下操作:
irb(main):016:0> array = [1,[2,3],[4,[5,6]]] => [1,6]]] irb(main):017:0> (traverser = lambda { |list| list.respond_to?(:each) ? list.each(&traverser) : puts(list) })[array] 1 2 3 4 5 6 => [1,6]]]