#ruby
Вопрос:
таким образом, задание состоит в том, что я делаю заявление по делу и добавляю фильмы в паре с их рейтингом в хэш. В случае «добавить» предполагается добавить фильм с запросом и его парным рейтингом в хэш. Он также должен проверить, существует ли фильм уже в хэше, и запрашивать пользователя, если это так. Есть случай «обновления», который позволяет пользователю обновить фильм в хэше, а также проверяет, вводит ли пользователь фильм, которого нет в хэше. Теперь случай обновления работает нормально, он позволяет пользователю узнать, если фильмов не существует, однако я не думаю, что другая часть дела добавления работает должным образом? Я могу добавить «Wall-E» с рейтингом 10, и это не заставит меня сказать, что он уже есть.
movies = {
"Wall-E" => 10
}
puts "Please choose to add, update, display or delete movies"
choice = gets.chomp
case choice
when "add"
puts "Please name a movie you wish to add"
title = gets.chomp
puts "Please give a rating for this movie"
rating = gets.chomp
if movies[title.to_sym].nil? == true
movies[title.to_sym] = rating.to_i
puts "#{title} was added with a rating of #{rating}"
else
puts "The movie you entered has already been added"
end
when "update"
puts "Please name a movie you wish to update"
title = gets.chomp
if movies[title].nil? == true
puts "Hey bud, that one doesn't exist but you can add it if you want"
else
puts "Please give a rating for this movie"
rating = gets.chomp
movies[title.to_sym] = rating.to_i
end
Комментарии:
1. Пустая строка не равна нулю. Проверьте
title.empty?
вместо этого.2. @ZamanZaidi: Помимо того, что правильно сказал ToddAJacobs, тестирование чего-то
== true
не особенно элегантное (хотя бывают случаи, когда вам нужна эта конструкция). Постарайтесь избежать этого.3. Правильно, теперь я вижу, спасибо большое, один вопрос, хотя @user1934428, Что я должен делать вместо этого, что бы классифицировать как элегантное?
4. Если вы просто хотите проверить правдивость, сделайте что-нибудь вроде
if movies[title.to_sym].nil?
илиif movies[title.to_sym].empty?
, в зависимости от того, что вы хотите проверить. Если вы начнете сравниватьtrue
, то чем это закончится? Может быть , вы делаете аif (a>b)==true
, но потом вы продолжаете делать аif ((a>b)==true) == true
и так далее. Все правильное, но излишне сложноеif a>b
тоже подойдет. Вы можете подумать о сравнении сtrue
тем, есть ли, например, у вас значение, которое может быть либоtrue
илиfalse
, либо каким-либо другим типом данных. Но в таких ситуациях acase
часто бывает яснее, чем anif
.