当前位置: 首页 > 知识库问答 >
问题:

枚举数返回文件的每一行,但被占用

朱锦
2023-03-14

我想编写一个返回枚举数的方法(类似于file::foreach返回的枚举数),该方法连续返回文件的每一行,但会被占用。我的第一个方法是

def chomped_lines(filename)
  File.foreach(filename).map(&:chomp).each
end
my_enum = chomped_lines('my_file.txt')
....
my_enum.each { |line| .... }

这似乎是有效的,但是如果我理解正确(如果我错了,请纠正我),文件将作为一个整体进入内存,以便应用map

共有1个答案

都浩淼
2023-03-14

我写了一个类,我相信它能做到你想要的。它也作为一个要点发布在https://gist.github.com/keithrbennett/9f126fa17d9df5e3aacaf638b198dfb9。

在类定义之后有一些代码以几种方式来练习类。

#!/usr/bin/env ruby

class ChompedFileLines
  include Enumerable

  def initialize(filespec)
    @filespec = filespec
  end

  def each
      File.foreach(@filespec) { |line| yield line.chomp }
  end
end

# Exercise the class:

FILESPEC = '/usr/share/dict/words'

chomped_file_lines = ChompedFileLines.new(FILESPEC)
puts; p chomped_file_lines; puts
chomped_file_lines.first(10).each { |line| p line }

chomped_file_lines_enum = ChompedFileLines.new(FILESPEC).to_enum
puts; p chomped_file_lines_enum; puts
10.times { p chomped_file_lines_enum.next }
 类似资料:
  • 问题内容: 假设我有一个返回sth的查询。像这样: 是否可以添加另一列来枚举每个组中的行(即,枚举具有其他角色的经理,工人和人员,而不考虑其他角色)?像这样: 使用Oracle扩展很好。 问题答案: 使用窗口功能:

  • 问题内容: 我想知道是否有可能枚举返回的行。不根据任何列的内容,而只是产生一个连续的整数索引。例如 将返回一些内容: 它用于https://data.stackexchange.com/ 问题答案: 尝试:

  • 我有一个实体,有一个枚举类型字段和一个具有相同枚举类型和字段名的DTO。 我使用modelMapper创建一个新对象,不需要额外的配置。 但在将dto映射到实体对象后,实体对象上的性别为空。 对象有性别,我已经检查了很多。 请帮我理解这个问题。

  • 问题内容: 我想声明一个枚举Direction,它具有一个返回相反方向的方法(以下语法不正确,即,不能实例化枚举,但它说明了我的观点)。这在Java中可行吗? 这是代码: 问题答案: 对于那些按标题吸引的人:是的,您可以在枚举中定义自己的方法。如果您想知道如何调用这种非静态方法,则可以使用与其他任何非静态方法相同的方法- 在定义或继承该方法的类型实例上调用它。如果是枚举,则此类实例仅为s。 因此,