#ruby #string
#ruby #строка
Вопрос:
Писать что-то как это "#{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
настоящего момента.
Комментарии:
1. Тангенциально, но те же соглашения об именовании хотели бы
write_hello
вместоwriteHello
. Держитесь! 😀2. Да! Спасибо, просто сосредоточился на именах переменных.
3. В следующий раз, когда вы спросите себя «могу ли я сделать x вместо y?» , вам следует просто попробовать 🙂
4. Стефан, извини за глупый вопрос. Я пробовал в IntelliJ 2018.3 , но он выделен и работает странно. Глупо задавать этот вопрос, как кажется сейчас, но в то время это просто сбивало меня с толку. Спасибо за ~ дружеское напоминание ~. Спасибо 😉
5. RubyMine более полезен в этом отношении.
Ответ №1:
Это излишне многословно.
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:
Ваш код работает, но на самом деле это плохой код. Действительно, это должно быть записано как fileName
, хотя Rubyist не назвал бы переменную подобным образом в случае camel.
Однако было бы лучше написать короче, например
File.write(fileName, "Hello, world! I'm Ruby :)")
хотя, как отмечает Стефан, вам пришлось бы явно добавить символ новой строки в конце строки, если вы этого хотите, как отмечает Стефан.
Комментарии:
1. Извините, просто впервые в ruby. По-прежнему понятия не имею, как все работает. Работа с основами все еще продолжается…
2.
write
не добавляет новую строку (в отличие отputs
).