2010-12-12 4 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'ですか? –

+0

@Beerlington私はちょうどテストし、パラメータだけを使ってうまく動作します。 –

+11

@Beerlington:いいえ: 'case x;いつy ....。 Rubyは 'when =' x'を実行して 'when'ブロックに入るべきかどうかを判断します。 '==='は単に何か「有用」を行うように定義されています。たとえば、クラスの場合は 'instance_of? 'です。範囲については、それは 'include? 'などです。 –

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

残念ながら私のコードはエレガントではありません:) –

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" 

をこれはまた、動作しますエレガントなソリューションではありません。

関連する問題