2011-06-01 24 views

答えて

6

if文は、決定的な範囲/値を持っていないので、おそらく、あなたのコードのために、よりフィットすることではなく、単なる大なります:

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

有効なルビ構文ではないため、うまくいきません。ただし、この操作を行うことができます。

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

+0

私にとって理にかなっているのは、あなたのものだけです。本当にイディオムでエレガントです。それは私が使ったものです。 –

35

これは有効なルビ構文ではありません。あなたが必要なもの

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

であるあなたがcase xを書くとき、あなたが理解する必要がある重要な部分は、ルビーは、xを取り、その後、あなたがwhen句に挿入する引数または式との比較を適用することです。あなたはwhen x >2は以下のようにルビーする読み込み言う

ライン:あなたはcase文から特定のオブジェクトを削除すると

if ARGV.length == > 2 

は、あなたがwhenステートメント内で条件文を適用することができます。

+1

Ruby 1.8.7 + irb 0.9.5レポート(irb):4:OPの元の命令セットで構文エラー、予期しない '>'が発生しました。私の答えには、作業中の書き換えられた命令セットが含まれています。 –

+0

.rbファイルで試しましたが、構文エラーが表示されます。 *&^^%&^ IRB。 – Zabba

+0

実際、ここで迷惑なのは、自分の主張を裏付けるための決定的な文書を見つけることができないということです。 rubyspec.orgとruby-doc.orgは役に立ちません。私が見つけることができる言語構文仕様は、このケースをカバーしていないようです。 –

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。 –

関連する問題