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

क्या यह मामला पैरामीटर.क्लास नहीं होना चाहिए? –

+0

@ बियरलिंगटन मैंने अभी परीक्षण किया है, और यह केवल पैरामीटर का उपयोग करके ठीक काम करता है। –

+11

@ बेरलिंगटन: नहीं: एक केस एक्स में; कब क्यों ....; एंड', रुबी यह निर्धारित करने के लिए 'y === x' चलाता है कि उसे 'कब' ब्लॉक में प्रवेश करना चाहिए या नहीं। '===' बस कुछ "उपयोगी" करने के लिए परिभाषित किया गया है; उदाहरण के लिए, कक्षाओं के लिए, यह 'instance_of?' है; श्रेणियों के लिए, इसमें 'शामिल है?', आदि –

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" 

यह भी काम करेंगे, लेकिन एक सुरुचिपूर्ण समाधान नहीं है।

संबंधित मुद्दे