有这种Enumerator#feed方法,我偶然发现了.它被定义为:
feed obj→nil
设置e中下一个yield返回的值.如果未设置该值,则yield将返回nil.该值在被放弃后被清除.
我研究了这些例子和想法»耶!",这应该可以使用feed
:
enum = ['cat', 'bird', 'goat'].each # creates an enumerator
enum.next #=> 'cat'
enum.feed 'dog'
enum.next #=> returns 'bird', but I expected 'dog'
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我假设它没有返回'dog'
,因为each
它不是在yield
内部使用.
问题是,我无法从文档中的给定示例中推断出任何真实世界的用例,Google不是这个问题的朋友,并且(从我尝试过的)feed
似乎不适合其他Enumerator
/ Enumeration
方法.
请你能给我一个很好的例子来解释一下feed
,所以我能绕过它吗?
def meth
[1,2,3].each {|e| p yield(e)}
end
m = to_enum(:meth)
m.next #=> 1
m.feed "e"
m.next
#printed: "e"
#return => 2
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,feed会影响yield的结果,但是枚举器方法需要注意它
现在看看你自己的例子:
a = ['cat', 'bird', 'goat']
m = a.to_enum(:map!)
m.next
m.feed("dog")
m.next
m.next
p a #=> ["dog", nil, "goat"]
Run Code Online (Sandbox Code Playgroud)
方式feed
有效:
首先你需要调用next然后调用feed来设置值,然后next的下一次调用会应用更改(即使它引发了一个
StopIteration error
.)
有关更多解释,请查看此处的主题:Enum#feed:
.这有正确的解释enum#feed
.
归档时间: |
|
查看次数: |
455 次 |
最近记录: |