所以我试图通过这个简单的练习来理解代码块和迭代器,并使用我不理解的括号遇到了问题。
我有'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 do | i |”是一个代码块(没有'结束'?)正确?
如果是这样,那么为什么我试图将它放在{方括号}而不是使用'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}"}
但使用'do'有效
size.my_times do |i| puts "i'm on MY iteration #{i}"
答案 0 :(得分:-1)
'do | i |'在“size.my_times do | i |”是一个代码块(没有'结束'?)正确吗?
不,不是。 do ... end
是代码块。
如果是这样,那么为什么我试图将它放在{方括号}而不是使用'do'时会出错?
由于条件不满意,这个问题很平常。
答案 1 :(得分:-2)
'do | i |'是一个代码块,'end'是它的几行。
完整的块是
size.my_times do |i|
yield self[i]
end
所以正确的括号内版本是
size.my_times { |i| yield(self[i]) }
好的继续,没有什么可看的:p