Рефакторинг моего кода, чтобы файл автоматически закрывался после загрузки, как работает синтаксис? - PullRequest
0 голосов
/ 01 февраля 2019

Моя программа загружает список из файла, и я пытаюсь изменить метод так, чтобы он автоматически закрывался.

Я посмотрел документацию по Ruby, широкий ответ stackoverflow и веб-сайт этого парня , но синтаксис всегда разный и для меня пока что ничего не значит.

Моя первоначальная загрузка:

def load_students(filename = "students.csv")
  if filename == nil
    filename = "students.csv"
  elsif filename == ''
    filename = "students.csv"
  end
  file = File.open(filename, "r")
  file.readlines.each do |line|
    name, cohort = line.chomp.split(",")
    add_students(name).to_s
  end
  file.close
  puts "List loaded from #{filename}."
end

Мойпопытаться закрыть автоматически:

def load_students(filename = "students.csv")
  if filename == nil
    filename = "students.csv"
  elsif filename == ''
    filename = "students.csv"
  end
  open(filename, "r", &block)
  line.each do |line|
    name, cohort = line.chomp.split(",")
    add_students(name).to_s
  end
  puts "List loaded from #{filename}."
end

Я ищу тот же результат, но без необходимости вручную закрывать файл.

Не думаю, что он будет сильно отличаться,Так как же работает синтаксис для автоматического закрытия блоков?

1 Ответ

0 голосов
/ 01 февраля 2019
File.open(filename, 'r') do |file|
  file.readlines.each do |line|
    name, cohort = line.chomp.split(",")
    add_students(name).to_s
  end
end

Я бы реорганизовал весь код:

def load_students(filename = "students.csv")
  filename = "students.csv" if filename.to_s.empty?
  File.open(filename, "r") do |file|
    file.readlines.each do |line|
      add_students(line.chomp.split(",").first)
    end
  end
  puts "List loaded from #{filename}."
end

Или, что еще лучше, как предложил Киммо Лехто в комментариях:

def load_students(filename = "students.csv")
  filename = "students.csv" if filename.to_s.empty?
  File.foreach(filename) do |line|
    add_students(line.chomp.split(",").first)
  end
  puts "List loaded from #{filename}."
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...