Ruby 为什么';";案例;加上;何时>;2“;工作

Ruby 为什么';";案例;加上;何时>;2“;工作,ruby,Ruby,为什么这不起作用 case ARGV.length when 0 abort "Error 1" when > 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

为什么这不起作用

case ARGV.length
  when 0
    abort "Error 1"
  when > 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

if
语句可能更适合您的代码,因为您没有确定的范围/值,而只是大于:

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

这不是有效的ruby语法

你需要的是

case
  when ARGV.length == 0
    abort "Error 1"
  when ARGV.length > 2
    abort "Error 2"
end
在编写
case x
时,您需要了解的一个重要部分是ruby接受x,然后将比较应用于插入
When
子句中的参数或表达式

当x>2时你说的
行读起来像ruby:

if ARGV.length == > 2

case
语句中删除特定对象时,可以在
When
语句中应用条件。

使用
1.0/0.0
获得无穷大,这修复了@mosch的代码:

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

不必是Chuck Norris就可以除以浮点零。

Ruby 1.8.7+irb 0.9.5 reports(irb):4:语法错误,OP的原始指令集出现意外“>”。我的答案包括一个正在工作的重写指令集。我在一个.rb文件中试用了它,它确实显示了一个语法错误。*&^^^%&^事实上,这里令人恼火的是,我找不到支持我的主张的确切文件,我只是碰巧知道答案。rubyspec.org和ruby-doc.org没有任何帮助。我能找到的语言语法规范似乎没有涵盖这种情况。实际上,从技术上讲,它是:
if 2===>ARGV.length
-case语句在
when
关键字的参数上使用tripple equals运算符,他们提供了
case
关键字的参数作为自身比较的价值。你的答案对我来说是唯一有意义的——真正的惯用和优雅。这也是我使用的。你也可以用换行代替“then”而不是
(1.0/0.0)
我们可以用
Float::INFINITY
,它是在ruby 1.9.3中添加的。1.0/0.0周围的括号看起来多余,因为“.”的优先级比“/”低+1供Chuck Norris参考。