为什么这不起作用?为什么“case”与“when> 2”无关?
case ARGV.length
when 0
abort "Error 1"
when > 2
abort "Error 2"
end
为什么这不起作用?为什么“case”与“when> 2”无关?
case ARGV.length
when 0
abort "Error 1"
when > 2
abort "Error 2"
end
的if
声明很可能是你的代码更恰当的,因为你没有一个明确的范围/值,而只是一个大于:
if ARGV.length == 0
abort "Error 1"
elsif ARGV.length > 2
abort "Error 2"
end
嗯,它不工作,因为它不是有效的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
这不是有效的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
语句中适用条件句。
Ruby 1.8.7 + irb 0.9.5报告(irb):4:语法错误,意外的'>'与OP的原始指令集。我的答案包括一个工作改写指令集。 – 2011-06-01 23:24:25
我在.rb文件中试过了,它确实显示出语法错误。 *&^^%&^ IRB。 – Zabba 2011-06-01 23:25:28
其实这里讨厌的是,我找不到确切的文件来支持我的说法,我只是碰巧知道答案。 rubyspec.org和ruby-doc.org没有帮助。我可以找到的语言语法规范似乎没有涵盖这种情况。 – 2011-06-01 23:32:19
使用1.0/0.0
得到无穷大,修复@ mosch代码:
case ARGV.length
when 0
raise "Too few"
when 3..(1.0/0.0)
raise "Too many"
end
你不必是查克·诺里斯由浮点零除。
而不是'(1.0/0.0)'我们可以使用'Float :: INFINITY',它被加入红宝石1.9.3。 – 2015-06-08 23:57:26
我该如何解决我的特定代码?谢谢。 – emurad 2011-06-01 23:08:06
你是唯一对我有意义的答案 - 真正的地道和优雅。这也是我用过的。 – 2014-08-15 16:10:20