0

この例で再利用可能な読み取りメソッドを作成する最良の方法は何ですか? ファイルの読み取りと特定の正規表現パターンのチェックという 2 つの共通することを行う 2 つのコードのチャンクがあります。これらの 2 つのタスクを別の方法で分離して、再利用できるようにしたいと考えています。前もって感謝します。

メソッド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

また、関数の 3 番目のパラメーターとして を使用&blockして、代わりにyieldを記述できますblock.call line

于 2013-05-17T06:08:47.337 に答える