Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 2.0中不推荐使用IO行;如何逐行迭代?_Ruby_Ruby 2.0 - Fatal编程技术网

Ruby 2.0中不推荐使用IO行;如何逐行迭代?

Ruby 2.0中不推荐使用IO行;如何逐行迭代?,ruby,ruby-2.0,Ruby,Ruby 2.0,我的Ruby 1.9.3代码打开一个文件并检查每一行是否存在某个字符串: if File.open('Gemfile').lines.any?{|line| line.include?('pg')} puts "found 'pg'" end Ruby 2.0.0给了我一个警告: 警告:IO#行已弃用;改用#每条#线 在Ruby 2.0.0中实现这一点最有效的方法是什么?在Ruby 2.0IO中,每一行都可以返回一个枚举数。因此,将行替换为每行或简单地替换为每行应该与当前代码完全相同 if

我的Ruby 1.9.3代码打开一个文件并检查每一行是否存在某个字符串:

if File.open('Gemfile').lines.any?{|line| line.include?('pg')}
  puts "found 'pg'"
end
Ruby 2.0.0给了我一个警告:

警告:IO#行已弃用;改用#每条#线

在Ruby 2.0.0中实现这一点最有效的方法是什么?

在Ruby 2.0
IO中,每一行都可以返回一个枚举数。因此,将
替换为
每行
或简单地替换为
每行
应该与当前代码完全相同

if File.open('Gemfile').each {|line| line.include?('pg')}
  puts "found 'pg'"
end
在ruby 2.0
IO中,每一行都可以返回一个枚举数。因此,将
替换为
每行
或简单地替换为
每行
应该与当前代码完全相同

if File.open('Gemfile').each {|line| line.include?('pg')}
  puts "found 'pg'"
end

很快导致代码不可伸缩,因为它鼓励在迭代之前将整个文件加载到内存中。虽然今天的主机有很多GB的RAM,但这并不能给我们一个很好的理由尝试一次性将那么多GB的文本加载到内存中。相反,使用或保存内存,导致非常接近相同的执行速度,而不会过度使用RAM?如果您运行的是Linux或Mac操作系统,则执行此检查的最快方法是使用
grep
。它针对快速搜索进行了高度优化。
快速生成不可伸缩的代码,因为它鼓励在迭代之前将整个文件加载到内存中。虽然今天的主机有很多GB的RAM,但这并不能给我们一个很好的理由尝试一次性将那么多GB的文本加载到内存中。相反,使用或保存内存,导致非常接近相同的执行速度,而不会过度使用RAM?如果您运行的是Linux或Mac操作系统,则执行此检查的最快方法是使用
grep
。它对快速搜索进行了高度优化。