この簡単な演習でコードブロックとイテレータを理解しようとしていますが、理解できない括弧を使用して問題に遭遇しました。
「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|" で コード ブロック ('end' のないもの) は正しいですか?
もしそうなら、'do' を使用する代わりに {brackets} に入れようとするとエラーが発生するのはなぜですか?
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}"