Ruby 案例陈述don';行不通

Ruby 案例陈述don';行不通,ruby,if-statement,case,Ruby,If Statement,Case,我正在从“编程Ruby,实用程序员(2005年第2期)”学习Ruby,我被困在Case语句一章中。 所以我从书中复制粘贴了一些代码: def kind puts "Type year and I'll tell you genre: " ask = gets.chomp kind = case ask when 1850..1889 then "Blues" when 1890..1909 then "Ragtime" when 1910..1929 then "New

我正在从“编程Ruby,实用程序员(2005年第2期)”学习Ruby,我被困在Case语句一章中。 所以我从书中复制粘贴了一些代码:

def kind
  puts "Type year and I'll tell you genre: "
  ask = gets.chomp

  kind = case ask
  when 1850..1889 then "Blues"
  when 1890..1909 then "Ragtime"
  when 1910..1929 then "New Orleans Jazz"
  when 1930..1939 then "Swing"
  when 1940..1950 then "Bebop"
  else "Jazz"
end


puts "You typed year #{ask}. Genre of music in that period is 
       #{kind}."
end

kind

因此,无论我放在哪一年,输出都是“爵士乐”……我在错误地工作什么

gets.chomp
返回一个字符串,并将其与整数进行比较

分配后,您可以检查
ask

ask = gets.chomp
p ask
当您运行脚本并输入一个数字(例如1940)时,您应该会看到终端中打印的
“1940”
。数字周围的引号表示变量包含字符串,而不是数字。(仅供参考,此处不使用
put
,因为它不会显示引号。)

正如mudasobwa在其评论中所写,解决此问题的方法是在比较之前将输入转换为一个数字:

ask = gets.chomp.to_i

如果您再次添加
p ask
,您现在应该看到只有数字被打印到终端上,而周围没有任何
。这表明变量包含一个整数。

get.chomp
返回一个字符串,您正在将其与整数进行比较

分配后,您可以检查
ask

ask = gets.chomp
p ask
当您运行脚本并输入一个数字(例如1940)时,您应该看到终端中打印的
“1940”
。数字周围的引号显示变量包含字符串,而不是数字。(仅供参考,此处不使用
puts
,因为它不会显示引号。)

正如mudasobwa在其评论中所写,解决此问题的方法是在比较之前将输入转换为一个数字:

ask = gets.chomp.to_i

如果您再次添加
p ask
,您现在应该看到只有号码打印到终端上,而周围没有任何
。这表明变量包含一个整数。

ask=gets.chomp.to\u i
case ask.to\u i
。这就是为什么我对它进行了注释,但没有回答它。我不经常使用case语句。后来我在IRB中试过并删除了我的评论。@Martin np,我已经提供了正确的答案。
ask=gets.chomp.to_I
case ask.to_I
。这就是为什么我评论了它而没有回答它。我不经常使用case语句。我后来在IRB中试过,并删除了我的评论。@Martin np,我已经提供了正确的答案。