如何使Ruby中的枚举器变干

佩兹

我的班级中有一个File,我想each_line使用与该类相同的功能来实现File#each_line因此可以使用一个块或不使用一个块来调用它。如果不加阻塞地调用,Enumerator则返回an

这是我目前的代码:

  def each_line(&block)
    if block_given?
      read_loop(&block)
    else
      Enumerator.new do |y|
        read_loop(&y)
      end
    end
  end

  private

  def read_loop(&block)
    while line = readline
      block.yield line
    end
  end

我想知道是否有一种更简洁的惯用方式来实现eaching_line,而不是询问是否传递了一个块,并且在每种情况下做的相同事情几乎相同。

readline是该类中的一个公共方法(它会做更多的事情File#readline

约格午间

这正是该Object#enum_for方法的目的。Enumerator从采用块的迭代方法创建一个

只需将这样的内容作为您编写的任何迭代方法的第一行(在参数验证之后):

def each_line
  return enum_for(__callee__) unless block_given?

  while line = readline
    yield line
  end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使这些函数定义变干?

来自分类Dev

如何使该红宝石代码变干

来自分类Dev

Ruby:如何设置枚举器的状态?

来自分类Dev

如何在Ruby中“求和”可枚举

来自分类Dev

Ruby:循环枚举器

来自分类Dev

Ruby枚举器链接

来自分类Dev

使JQuery按钮代码变干

来自分类Dev

在Ruby中概念化枚举器和惰性枚举器

来自分类Dev

如何使用Ruby枚举器获取下n个元素?

来自分类Dev

枚举器作为Ruby中的无限生成器

来自分类Dev

如何使用枚举器

来自分类Dev

如何制作一个通过其他两个枚举器进行惰性迭代的ruby枚举器?

来自分类Dev

如何枚举ui路由器中的注册状态?

来自分类Dev

如何在C#中模拟枚举器

来自分类Dev

编译器如何处理枚举中的符号常量?

来自分类Dev

如何使用枚举在控制器中创建List <selectListItem>

来自分类Dev

如何使用枚举在控制器中创建List <selectListItem>

来自分类Dev

如何在Ember中创建自定义枚举器?

来自分类Dev

如何在C#中模拟枚举器

来自分类Dev

如何在pyalsaaudio中设置混合器枚举值?

来自分类Dev

为什么在Ruby中使用枚举器

来自分类Dev

ruby的CSV.foreach枚举器的解释?

来自分类Dev

ruby是否支持递归枚举器?

来自分类Dev

带有链接的Ruby枚举器

来自分类Dev

捆绑器如何隔离Ruby中的宝石?

来自分类Dev

枚举终结器中的列表

来自分类Dev

GCC中的枚举器属性

来自分类Dev

如何创建一个时变监听器

来自分类Dev

有什么办法可以使此文件变干?