在此示例中,创建可重用读取方法的最佳方法是什么。我有两个代码块,共同做两件事,读取文件并检查某个正则表达式模式。我想在一个单独的方法中将这两个任务分开,以便我可以重复使用它。我开始重构但它不起作用,我仍然在学习如何有效地使用块。有人能告诉我最好的方法吗?提前谢谢。
方法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
答案 0 :(得分: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
。