В настоящее время я изучаю Ruby в Codecademy, и я не уверен, работает ли это, согласно веб-сайту, это правильно, но я не понимаю, как?

#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 , либо каким-либо другим типом данных. Но в таких ситуациях a case часто бывает яснее, чем an if .