2010-12-12 30 views
24
def my_method(parameter) 
    if <what should be here?> 
    puts "parameter is a string" 
    elsif <and here?> 
    puts "parameter is a symbol" 
    end 
end 

回答

45

最簡單的形式是:

def my_method(parameter) 
    puts "parameter is a #{parameter.class}" 
end 

但是,如果你真的想基於類型做一些處理做到這一點:

def my_method(parameter) 
    puts "parameter is a #{parameter.class}" 
    case parameter 
    when Symbol 
     # process Symbol logic 
    when String 
     # process String logic 
    else 
     # some other class logic 
    end 
end 
+0

不應該是'case parameter.class'嗎? – 2010-12-12 14:49:14

+0

@Beerlington我剛剛測試過,並且它僅使用參數就可以正常工作。 – 2010-12-12 15:39:51

+11

@Beerlington:否:在案例x中;當Y ....; Ruby'運行'y === x'來確定它是否應該進入'when'塊。 '==='只是定義爲做一些「有用的」;例如,對於類,它是'instance_of?';對於範圍,它是'include?'等。 – 2010-12-12 15:42:56

20
def my_method(parameter) 
    if parameter.is_a? String 
    puts "parameter is a string" 
    elsif parameter.is_a? Symbol 
    puts "parameter is a symbol" 
    end 
end 

應該解決您的問題

11
if parameter.is_a? String 
    puts "string" 
elsif parameter.is_a? Symbol 
    puts "symbol" 
end 

我希望這有助於。

+0

對不起,我的代碼並不像以往那樣優雅:) – 2010-12-12 14:11:00

1
def my_method(parameter) 
    if parameter.is_a? String 
    puts "parameter is a string" 
    elsif parameter.is_a? Symbol 
    puts "parameter is a symbol" 
    end 
end 
-1
if parameter.respond_to? id2name 
     p "Symbol" 
else 
    p "not a symbol" 

這也將工作,但不是一個優雅的解決方案

相關問題