2016-10-04 25 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 

但是當我做它的if/else,它的工作原理:

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 

相當於

if y === x 
    puts "y" 
elsif z === x 
    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" 

注:

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

Module#===見。

所以,當你寫

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

紅寶石試圖評估

(>= 30.0) === massIndex 

導致她提出一個語法錯誤。

下面是另一個例子,說明方法===的用處。

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

由於

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

看到Regexp#===

Here是關於case聲明的優秀文章。

+0

有趣的問題,但「等於」意味着頂部的指令與機器人相同,或者你是在談論最底層的指令(=== - 相當於)?編輯:我檢查了它,謝謝 – AbUndZu

2
case 
    when massIndex >= 30.0 
    "obese" 
    [some instructions like this] 
    else 
    "error" 
    end 
相關問題