Ruby代码在Codeacademy正常运行,Mac终端异常求原因排查
问题原因及修复方案
你的代码问题和Codeacademy环境、Mac终端无关,是条件判断里误用赋值运算符导致的逻辑错误:
错误点分析
在add分支的if语句中,你写了:
if movies[title.to_sym] = nil
这里的=是赋值运算符,它会把nil赋值给movies[title.to_sym],然后返回nil。而Ruby中nil在条件判断里被视为假值,所以不管原哈希里是否存在该电影,这个条件都会判定为假,直接执行else分支的"It's already on the list!"。
另外,你已经把title转成了Symbol(title = gets.chomp.to_sym),后面不需要再重复调用to_sym,属于冗余操作。
修复后的代码
把赋值运算符改成判断相等的==,或者更Ruby化的nil?方法:
movies = { Hackers: 8.0, Gladiator: 9.0, } puts "Would you like to add, update, display, or delete movies?" choice = gets.chomp case choice when "add" puts "What's the movie called?" title = gets.chomp.to_sym puts "What would you rate it out of 10?" rating = gets.chomp.to_i # 方案1:使用nil?方法判断键是否存在(推荐) if movies[title].nil? movies[title] = rating puts "The movie has been added!" else puts "It's already on the list!" end end
或者用==判断:
if movies[title] == nil # ... end
额外说明
Codeacademy环境里可能因为测试用例的特殊性没暴露这个问题,但这是代码本身的逻辑错误,和运行环境无关。修复后在Mac终端就能正常运行了。
内容的提问来源于stack exchange,提问作者maximusmd
相关产品推荐
相关产品推荐

