【发布时间】:2013-05-13 03:33:43
【问题描述】:
所以我试图通过这个简单的练习来理解代码块和迭代器,但使用我不理解的括号时遇到了问题。
我有一个“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}"}
据我了解,'do |i|'在“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}"
【问题讨论】:
标签: ruby iterator codeblocks