2013-05-17 28 views
0

在此示例中,創建可重用讀取方法的最佳方法是什麼?我有兩個共同執行兩件事的代碼塊,讀取文件並檢查某個正則表達式模式。我想在一個單獨的方法中分離這兩個任務,以便我可以重新使用它。我開始重構但它不工作,我仍然在學習如何有效地使用塊。可以有人告訴我最好的方法來做到這一點嗎?先謝謝你。在此示例中實現DRY的最佳方法

方法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 

回答

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

+0

謝謝你,我很欣賞speransky – katie

+0

雖然沒有被打印出來,但是你測試了一下,看看它是否在你的最後? – katie

相關問題