0

在此示例中创建可重用读取方法的最佳方法是什么。我有两块代码共同做两件事,读取文件并检查某个正则表达式模式。我想用一个单独的方法将这两个任务分开,以便我可以重用它。我开始重构但它不起作用,我仍在学习如何有效地使用块。有人可以告诉我最好的方法吗?先感谢您。

方法1

   File.readlines(file) do |line|
    if line.match(/@/)
    line.split.each do |word| 
    if word.include?("@")
    puts word
      end

     end
  end  

方法2

     File.readlines(file) do |line|
     if line.match(/$hello/)
     line.split(',').each do |word|
     puts word.split('.')[0][0..6]

     end
    end 
    end 

重用方法

    def read_file file, pattern
    File.readlines(file) do |line|
    if line.match (pattern)
      #not sure what to return here
    end
   end
4

1 回答 1

3

我不确定我是否完全理解你的问题,但这段代码应该可以帮助你理解如何使用块并做你想做的事。

def f file, pattern
  File.readlines(file).each do |line|
    if line.match (pattern)
      yield line
    end
  end
end

f('text.txt', /@/) do |line| 
  line.split.each do |word| 
    if word.include?('@')
      puts word
    end
  end
end

f('text.txt', /^hello/) do |line|
  line.split(',').each do |word|
    puts word.split('.')[0][0..6]
  end
end

您也可以将&block其用作函数的第三个参数,然后yield您可以编写block.call line.

于 2013-05-17T06:08:47.337 回答