2010-12-12 16 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 

cevap

45

en basit formu olabilir

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 
Bu aynı zamanda çalışacak
+0

Bu, 'case parameter.class' değil mi? –

+0

@Beerlington Sadece test ettim ve sadece parametre kullanarak çalışıyor. –

+11

@Beerlington: Hayır: bir durumda x; ne zaman ....; Ruby, 'when' bloğuna girip girmeyeceğini belirlemek için' y === x' çalışır. '===' sadece “yararlı” bir şey yapmak için tanımlanmıştır; örneğin, sınıflar için, 'instance_of?'; aralıklar için, 'dahil?', vb –

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 

umarım bu yardımcı olur sorununuzu

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

çözmek gerekir.

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

Ama gerçekten türüne göre bazı işlem yapmak istiyorsanız bunu:

+0

Üzgünüm, kodum geri kalan kısımda rahat değil :) –

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" 

, ama zarif bir çözüm değil.

İlgili konular