2016-10-04 8 views
2

どのような指示をいつ受けることができますか?私のコードのいくつかはif/elseの下で動作しますが、その場合は動作しません。例えばステートメントはどのような種類の命令(ケース)に置くことができますか?

def categories(massIndex) 
    case massIndex 
    when >= 30.0 
    "obese" 
    #[some instructions like this] 
    else 
    "error" 
    end 
end 

は、私はいつもこのようなエラーを参照してください。

bmi.rb:8: syntax error, unexpected >= 
when >= 30.0 

しかし、私はそれを行うとき/他には、それが動作するかどうかを:

def categories(massIndex) 
    if massIndex >= 25 
    "something" 
    else 
    "error" 
    end 
end 

は私が修正することはできますまだそれを使用しているか、if/elseを使用する必要がありますか?

答えて

4
case x 
when y 
    puts "y" 
when z 
    puts "z" 
end 

case "hello" 
when Array 
    puts "Array" 
when String 
    puts "String" 
end 
    #=> "String" 

x = "hello" 
if Array === x 
    puts "Array" 
elsif String === x 
    puts "String" 
end 
    #=> "String" 

注について

if y === x 
    puts "y" 
elsif z === x 
    puts "z" 
end 

と等価である:

Array.method(:===).owner 
    #=> Module 
String.method(:===).owner 
    #=> Module 

Module#===を参照してください。

あなたは

case massIndex 
when >= 30.0 
    "obese" 
... 

を書くときにRubyは、彼女が構文エラーが発生する原因

(>= 30.0) === massIndex 

を評価しようとします。

ここには、方法===の有用性を示す別の例があります。

/cat/.method(:===).owner 
    #=> Regexp 

以来

case "spiggot" 
when /cat/ then "cat" 
when /dog/ then "dog" 
when /pig/ then "pig" 
end 
    #=> pig 

Regexp#===を参照してください。

Hereは、caseに関する優れた記事です。

+0

面白い質問ですが、「これと等価です」とは、トップの手順がボットと同じであることを意味しますか、ボトムの説明(===は同等です)ですか?編集:私はそれを確認した、ありがとう – AbUndZu

2
case 
    when massIndex >= 30.0 
    "obese" 
    [some instructions like this] 
    else 
    "error" 
    end 
関連する問題