enum_for i yield

def fib
	tab = [1,1]
	loop do
		yield tab.last
		tab << tab[-1] + tab[-2]
	end
end


p enum_for(:fib).take(10).each {|a| puts a}

Mam pytanie co do takiego kodu. enum_for przekształca tą metodę na enumerator. Czy yield odnosi się do pierwszego bloku danego do dowolnej metody enumeratora?

Edit:

def fib
	tab = [1,1]
	loop do
		yield tab.last
		tab << tab[-1] + tab[-2]
	end
end


p enum_for(:fib).take_while {|a|  a < 100}

Czy w tym przypadku po tym jak kolejny element jest większy od 100 to ten yield rzuci wyjątkiem StopIteration?

Edit2:
Co jeśli tego yielda by tam nie było. Może on określa na jakim elemencie ma operować cały enumerator?