You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:22:53