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

Ruby 我的案例陈述不起作用,但逻辑在我看来是正确的,ruby,Ruby,该程序打印第一条语句,在我输入一个数字(例如“5”)后退出,不打印任何其他内容。从我在case语句中输入的逻辑来看,我希望它会输出“You not a成年人:”(“对于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 :(" put

该程序打印第一条语句,在我输入一个数字(例如“5”)后退出,不打印任何其他内容。从我在
case
语句中输入的逻辑来看,我希望它会输出“You not a成年人:”(“对于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 
打印“输入您的年龄”
age=get.chomp

如果age.to\u i试试这个。注意我已经从
case
语句中删除了
age.to\u 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 
这基本上意味着:

if "bar" === foo
  ...
所以你的代码是这样的:

if age.to_i<18 === age.to_i
  ...
大概意思是

if foo === "bar"
  ...

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

试试这个。注意,我已经从
案例中删除了
年龄。to\u 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 
这基本上意味着:

if "bar" === foo
  ...
所以你的代码是这样的:

if age.to_i<18 === age.to_i
  ...
大概意思是

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
语句,并使用ranges,可以更清楚地了解发生的情况。

以下是一个经过清理的版本:

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


将所有这些都折叠成一个
案例
语句,并使用范围使事情变得更加清楚。

@KarenB你的意思是
案例年龄。to_i<18
?是的,我当然知道,谢谢。我把责任推到了键盘上。将修复。(重新发布编辑的评论)
case age.to_i<18/when true/when false
对我来说也会起作用,感觉更自然一些。另外,不要错过case when age.to_i==18扩展sawa的评论,
case foo;when bar
测试
bar==foo
(按特定顺序)例如,
Integer===1
为真,而
1===Integer
为假。这与测试类有关,例如,
case foo;when Integer…
@NeilSlater谢谢!我已经更新了我的答案,使用
=
@KarenB你是说
病例年龄吗?是的,我当然知道了,谢谢。我把问题归咎于猫board.Will fix.(重新发布编辑后的评论)
case age.to_i<18/当为真/当为假时
也会起作用,对我来说感觉更自然一些。另外,不要错过age.to_i==18的案例要扩展sawa的评论,
case foo;当bar
测试
bar==foo
(按照特定顺序)例如,
Integer===1
为真,而
1===Integer
为假。这与测试类有关,例如,
case foo;when Integer…
@NeilSlater谢谢!我已经更新了我的答案,使用
=
。因为你在使用
年龄。重复使用
,你真正想做的是
age=get.chomp.to_i
转换一次,然后使用它。当某人输入18时会发生什么情况?这两种情况都不匹配。你还阻止120岁以下的人看到你的消息。Whta是错误的?你声明它。你在问布尔值是否匹配一个数字。显然,它不匹配。因为你使用的是
age.to_i
re同样,你真正想要的是做
age=gets.chomp.to_i
转换一次,然后使用它。当有人输入18时会发生什么?这两种情况都不匹配。你还阻止120岁以下的任何人看到你的消息。什么是错误的?你陈述它。你在询问布尔值是否匹配一个数字。显然斯莱,不需要。我相信这里也不需要
chomp
。@sagarpandya82技术上不需要,
to_I
无论如何都会清除它。我相信这里也不需要
chomp
。@sagarpandya82技术上不需要,
to_I
无论如何都会清除它。