我遇到了解决问题,我的解决方案如下。
class Array
def my_each(&prc)
prc ||= proc { |ele| puts ele }
idx = 0
while idx < self.length
prc.call(self[idx])
idx += 1
end
self
end
end
puts ["apple", "banana"].my_each {} #=> ["apple, "banana"]
我的问题是,为什么结果不是
#=>"apple"
#=>"banana"
#=>["apple", "banana"]
这是因为我的块没有运行而且只返回了self?
答案 0 :(得分:2)
原因很简单:您的区块是空的,它没有做任何事情。
如果要打印单个项目,则需要在块中打印它们:
puts ["apple", "banana"].my_each {|el| puts el }
# apple
# banana
# apple
# banana
或者不传递一个块,以便你的默认块触发:
puts ["apple", "banana"].my_each
# apple
# banana
# apple
# banana