所以我试图通过这个简单的练习来理解代码块和迭代器,并使用我不理解的括号遇到了一个问题。
我有一个“my_times”方法
class Integer
def my_times
c = 0
until c == self
yield(c) # passes 'c' to code block
c += 1
end
self # return self
end
end
5.my_times {|i| puts "i'm on MY iteration #{i}"}
效果很好,然后我有一个'my_each2'可以正常运行
class Array
def my_each2
size.my_times do |i| # <-- do signifies a code block correct? 'end' is unnecessary?
yield self[i]
end
self
end
end
array.my_each2 {|e| puts "MY2 block just got handed #{e}"}
据我了解,“做|我|” 在“size.my_times 做 |i|” 代码块(没有“结束”?)是否正确?
如果是这样,那么为什么我在尝试将其放入 {brackets} 而不是使用“do”时会出错?
class Array
def my_each3
size.my_times {|i| puts "i'm on MY iteration #{i}"} # <-- error here
yield(self[i])
end
self
end
end
array.my_each3 {|e| puts "MY3 block just got handed #{e}"}
但使用“做”的作品
size.my_times do |i| puts "i'm on MY iteration #{i}"