CODE-I混乱与产量调用外部块
def sample
x = "hi"
puts " #{x}"
x = yield
puts " #{x}"
end
在下面的代码block {}
从这里=>sample {"hellooo"}
称为 yield
和分配的 “hellooo” 到x
。看起来不错并且如预期的那样。
sample{'helloo'}
# >> hi
# >> helloo
CODE-II
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
请在发布代码时多加注意,以确保读者的舒适。这是你最大的利益。原始代码是不可读的IRB混乱。 –
你得到零?因为我得到无限的等待和IRB挂起。 – Linuxios
和一个失控的过程。 – Linuxios