产生或返回 Enumerator 的 ruby 方法
在最新版本的 Ruby 中,Enumerable
中的许多方法在没有块的情况下调用时都会返回一个 Enumerator
:
[1,2,3,4].map
#=> #<Enumerator: [1, 2, 3, 4]:map>
[1,2,3,4].map { |x| x*2 }
#=> [2, 4, 6, 8]
我想在我自己的方法中做同样的事情,如下所示:
class Array
def double(&block)
# ???
end
end
arr = [1,2,3,4]
puts "with block: yielding directly"
arr.double { |x| p x }
puts "without block: returning Enumerator"
enum = arr.double
enum.each { |x| p x }
in recent versions of Ruby, many methods in Enumerable
return an Enumerator
when they are called without a block:
[1,2,3,4].map
#=> #<Enumerator: [1, 2, 3, 4]:map>
[1,2,3,4].map { |x| x*2 }
#=> [2, 4, 6, 8]
I want do do the same thing in my own methods like so:
class Array
def double(&block)
# ???
end
end
arr = [1,2,3,4]
puts "with block: yielding directly"
arr.double { |x| p x }
puts "without block: returning Enumerator"
enum = arr.double
enum.each { |x| p x }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
核心库插入一个守卫
return to_enum(:name_of_this_method, arg1, arg2, ..., argn) except block_given?
。在你的情况下:The core libraries insert a guard
return to_enum(:name_of_this_method, arg1, arg2, ..., argn) unless block_given?
. In your case:使用 Enumerator#new:
use Enumerator#new:
另一种方法可能是:
Another approach might be:
对我来说最简单的方法
=>
3
6
9
12
15
18
21
easiest way for me
=>
3
6
9
12
15
18
21