我的案例陈述不起作用,但逻辑对我来说看起来是正确的



该程序打印第一个语句,并在我输入数字(例如"5")后退出,而不打印任何其他内容。根据我在case语句中输入的逻辑,我希望它输出"你不是成年人:("对于 5.其他低于 120 的值也无法按预期工作。

怎么了?

print "Enter you age "
age = gets.chomp
if age.to_i<120
  case age.to_i
  when age.to_i<18
    puts "You're not an adult :("
    puts "Sorry"
  when age.to_i>18
    puts "You are now an adult!"
    puts "phew"
  end
end 

试试这个。请注意,我已经从 case 语句中删除了age.to_i

print "Enter you age "
age = gets.chomp
if age.to_i<120
    case
        when age.to_i<18
            puts "You're not an adult :("
            puts "Sorry"
        when age.to_i>18
            puts "You are now an adult!"
            puts "phew"
        end
    end 

编辑

需要一点解释。

当你写这个的时候:

case foo
  when "bar"
    ...

这实质上意味着:

if "bar" === foo
  ...

所以你的代码有点像这样:

if age.to_i<18 === age.to_i
  ...

这没有多大意义。如果你只是写case后面什么都没有,那么它更像是一个普通的if语句。例如

case
  when foo === "bar"
    ...

大致表示

if foo === "bar"
  ...

这就是你想要的。我希望这有所帮助!

这是一个清理的版本:

print "Enter you age "
age = gets.chomp.to_i
case age
when 0..18
  puts "You're not an adult :("
  puts "Sorry"
when 18..120
  puts "You are now an adult!"
  puts "phew"
else
  puts "I think you're lying!"
end

将所有这些折叠到一个case语句中并使用范围可以使正在发生的事情更加清晰。

相关内容

最新更新