コード-I
def sample
x = "hi"
puts " #{x}"
x = yield
puts " #{x}"
end
ここから以下のコードblock {}
で =>に「hellooo」をsample {"hellooo"}
呼び出し
て割り当てます。見た目も良く、期待通り。yield
x
sample{'helloo'}
# >> hi
# >> helloo
コードⅡ
o = Object.new
def o.each
x = yield
p x
x = yield
p x
x = yield
p x
end
e = o.to_enum # => #<Enumerator: #<Object:0x007fd1d20494e8>:each>
e.next "sample"
p は何も出力しなかったため、以下の呼び出しで同じことが起こらなかったのはなぜですか?
e.next {"sample"} # => nil
e.next # => nil
# >> nil
編集(ここでは、どのようenum#feed
に変更されましたyield
か?)
o = Object.new
=> #<Object:0x2299d88>
def o.each
x = yield
p x
x = yield
p x
x = yield
p x
end
=> nil
e=o.to_enum
=> #<Enumerator: #<Object:0x2299d88>:each>
e.next
=> nil
e.feed "hi"
=> nil
e.next
"hi"
=> nil