为什么"case> 2"的"case"不起作用?

emu*_*rad 28 ruby

为什么这不起作用?

case ARGV.length
  when 0
    abort "Error 1"
  when > 2
    abort "Error 2"
end
Run Code Online (Sandbox Code Playgroud)

Phi*_*lds 43

它不是有效的ruby语法.

你需要的是什么

case
  when ARGV.length == 0
    abort "Error 1"
  when ARGV.length > 2
    abort "Error 2"
end
Run Code Online (Sandbox Code Playgroud)

在编写时case x,您需要理解的重要部分是ruby接受x然后将比较应用于您在when子句中插入的参数.

你说的when x >2那条读到ruby 的行:

if ARGV.length == > 2
Run Code Online (Sandbox Code Playgroud)

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


And*_*imm 22

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

case ARGV.length
  when 0
    raise "Too few"
  when 3..(1.0/0.0)
    raise "Too many"
end
Run Code Online (Sandbox Code Playgroud)

你不必被查克诺里斯除以浮点零.

  • 而不是`(1.0/0.0)`我们可以使用`Float :: INFINITY`,它是在ruby 1.9.3中添加的. (11认同)

mor*_*itz 17

好吧,它不起作用,因为它不是有效的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
Run Code Online (Sandbox Code Playgroud)


Dyl*_*kow 7

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

if ARGV.length == 0
  abort "Error 1"
elsif ARGV.length > 2
  abort "Error 2"
end
Run Code Online (Sandbox Code Playgroud)