2011-06-01 34 views

回答

6

if声明很可能是你的代码更恰当的,因为你没有一个明确的范围/值,而只是一个大于:

if ARGV.length == 0 
    abort "Error 1" 
elsif ARGV.length > 2 
    abort "Error 2" 
end 
15

嗯,它不工作,因为它不是有效的ruby语法。但是,你可以这样做:

x = 15 
case x 
    when 0..9 then puts "good" 
    when 10..12 then puts "better" 
    when 13..200 then puts "best" 
    else 
    puts "either great or poor" 
end 
+3

我该如何解决我的特定代码?谢谢。 – emurad 2011-06-01 23:08:06

+0

你是唯一对我有意义的答案 - 真正的地道和优雅。这也是我用过的。 – 2014-08-15 16:10:20

35

这不是有效的ruby语法。

你需要的是

case 
    when ARGV.length == 0 
    abort "Error 1" 
    when ARGV.length > 2 
    abort "Error 2" 
end 

当你写case x,你需要了解的重要组成部分,是红宝石取X,然后应用的比较,你when子句中插入参数或表达式。

行,你说when x >2读取红宝石一样:

if ARGV.length == > 2 

当您从case语句删除特定对象,你可以在when语句中适用条件句。

+1

Ruby 1.8.7 + irb 0.9.5报告(irb):4:语法错误,意外的'>'与OP的原始指令集。我的答案包括一个工作改写指令集。 – 2011-06-01 23:24:25

+0

我在.rb文件中试过了,它确实显示出语法错误。 *&^^%&^ IRB。 – Zabba 2011-06-01 23:25:28

+0

其实这里讨厌的是,我找不到确切的文件来支持我的说法,我只是碰巧知道答案。 rubyspec.org和ruby-doc.org没有帮助。我可以找到的语言语法规范似乎没有涵盖这种情况。 – 2011-06-01 23:32:19

19

使用1.0/0.0得到无穷大,修复@ mosch代码:

case ARGV.length 
    when 0 
    raise "Too few" 
    when 3..(1.0/0.0) 
    raise "Too many" 
end 

你不必是查克·诺里斯由浮点零除。

+9

而不是'(1.0/0.0)'我们可以使用'Float :: INFINITY',它被加入红宝石1.9.3。 – 2015-06-08 23:57:26

相关问题