Вы можете извлечь свой повторный код в метод и вызвать его на ARGF
или file
, когда они отвечают на те же методы.
def do_check(to_check)
to_check.each do |url|
begin
check(url)
rescue Timeout::Error, Errno::ETIMEDOUT
puts "Timeout Error, try again"
redo
end
end
end
Тогда ваш пример становится:
if filename
begin
if filename == '-'
do_check(ARGF)
else
File.open(filename) do |file|
do_check(file)
end
end
rescue Interrupt, Errno::EINTR
exit(1)
end
end
Я использовал do ... end
вместо {}
просто потому, что мне легче читать.