Могу ли я сделать `" # {file_name} "` проще? - PullRequest
0 голосов
/ 27 марта 2019

Выглядит довольно многословно, чтобы написать что-то вроде этого "#{file_name}" вместо file_name.

  def write_hello(file_name)
    File.open("#{file_name}", "w") { |file| file.puts "Hello, world! I'm Ruby :)"}
  end

Что я могу сделать, чтобы сделать его чище?

Обновлено

У меня просто есть ruby ​​ соглашения об именах , поэтому я обновил fileName до file_name сейчас.

Ответы [ 2 ]

5 голосов
/ 27 марта 2019

Это ненужно многословно.

x = "test"
"#{x}"
# => "test"

Это буквально то же самое в вашем случае.

Идиоматическая версия Ruby этого кода выглядит так:

def write_hello(filename)
  File.open(filename, "w") do |file|
    file.puts "Hello, world! I'm Ruby :)"
  end
end

При этом используется многострочная форма do ... end, которая часто намного проще для понимания и понимания, но в остальном эквивалентна форме { ... }.Новички в Ruby могут быть немного озадачены тем, как { x: 'y' } и { |x| 'y' } являются совершенно разными вещами, поэтому это позволяет избежать двусмысленности.

Нет необходимости ставить что-то в изоляции.Это было бы необходимо, если вы хотите добавить расширение файла, например:

File.open("#{filename}.txt", "w") do |file|
  # ...
end

Где бы вы назвали это как:

write_hello(:example)

И это создаст example.txt

2 голосов
/ 27 марта 2019

Ваш код работает, но на самом деле это плохой код. На самом деле это должно быть записано как fileName, хотя Rubyist не назвал бы такую ​​переменную в случае верблюда.

Однако было бы лучше написать короче, как

File.write(fileName, "Hello, world! I'm Ruby :)")

хотя вам нужно было бы явно добавить символ новой строки в конце, если строка, если вы хотите, как отмечает Стефан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...