2013-05-21 8 views
7

मुझे रुबी 2.0 में case कथन में प्रोसेस की अनुमति देने की कुछ याद है, लेकिन मैं इसे Google नहीं कर सकता।रूबी 2.0 में केस स्टेटमेंट के साथ प्रोसेस का उपयोग किया जा सकता है?

मैं Ruby 2.0.0 NEWS और How to write a switch statement in Ruby जाँच की कोशिश की। मैंने http://ruby-doc.org का भी दौरा किया, लेकिन कीवर्ड के लिए यह लिंक रुबी 1.9 के लिए था, रूबी 2.0 नहीं।

क्या मामले बयान में प्रोसेस की अनुमति है?

+0

मैंने सोचा कि यह पहले से था। – sawa

उत्तर

19

हां।

2.0.0p0 :001> lamb = ->(x){ x%2==1 } 
#=> #<Proc:[email protected](irb):1 (lambda)> 

2.0.0p0 :002> case 3; when lamb then p(:yay); end 
:yay 
#=> :yay 

2.0.0p0 :003> lamb === 3 
#=> true 

2.0.0p0 :007> lamb === 2 
#=> false 

बहरहाल, यह कोई अलग है की तुलना में 1.9.1 Proc#=== के बाद से वापस तो परिभाषित किया गया था। माणिक डॉक्स इस विधि दिखा एक समस्या है लगता है के बाद से, स्पष्ट होना प्रलेखन का कहना है कि proc === obj:

#call तरह proc के पैरामीटर के रूप में obj साथ ब्लॉक invokes। यह case कथन में एक proc ऑब्जेक्ट को when खंड का लक्ष्य होने की अनुमति देना है।


रूबी शुरुआत के लिए, तो रूबी के case बयान में when खंड खंड में मूल्य लेता है और उस पर === प्रणाली को बुलाती है, मामले बयान के तर्क में गुजर। तो, उदाहरण के लिए, इस कोड को ...

case "cats" 
    when /^cat/ then puts("line starts with cat!") 
    when /^dog/ then puts("line starts with dog!") 
end 

... अगर यह भी मिलान होने पर फैसला करने के लिए /^cat/ === "cats" चलाता है; RegExp कक्षा regex मिलान करने के लिए === विधि को परिभाषित करती है। इस प्रकार, आप when क्लॉज में अपनी ऑब्जेक्ट का उपयोग तब तक कर सकते हैं जब तक आप इसके लिए === परिभाषित करते हैं।

Moddable = Struct.new(:n) do 
    def ===(numeric) 
    numeric % n == 0 
    end 
end 

mod4 = Moddable.new(4) 
mod3 = Moddable.new(3) 

12.times do |i| 
    case i 
    when mod4 
     puts "#{i} is a multiple of 4!" 
    when mod3 
     puts "#{i} is a multiple of 3!" 
    end 
end 

#=> 0 is a multiple of 4! 
#=> 3 is a multiple of 3! 
#=> 4 is a multiple of 4! 
#=> 6 is a multiple of 3! 
#=> 8 is a multiple of 4! 
#=> 9 is a multiple of 3! 
+0

'l' स्टैक ओवरफ़्लो पर' 1' के समान ही दिखता है। अगर जॉर्ज ऑरवेल को गणित विभाग के प्रभारी रखा गया तो मैं एक मिनट के लिए सोच रहा था! (पीएस: क्या केस स्टेटमेंट में प्रोसेस का उपयोग करने पर कोई दस्तावेज है?) –

+0

मैं 1.9.1 दस्तावेज़ों से जुड़ा हुआ हूं, लेकिन ऐसा लगता है कि दस्तावेज़ों के सभी आधुनिक संस्करण विधि के लिए उचित शीर्षलेख प्रदान करने में विफल रहते हैं, जिससे यह बहुत भ्रमित हो जाता है । मैं 'ProC# ==='' पर दस्तावेज़ के साथ प्रश्न संपादित करूंगा। – Phrogz

+1

धन्यवाद, phroggie, मेरे लिए 'ProC# ===' ताज़ा करने के लिए। –

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

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