2009-02-08 5 views
49

क्या कोई रूबी में टुपल्स का उपयोग करता है? यदि हां, तो एक टुपल कैसे लागू कर सकता है? रूबी हैश अच्छे हैं और लगभग भी काम करते हैं, लेकिन मैं वास्तव में पाइथन में टुपल क्लास की तरह कुछ देखना चाहता हूं, जहां आप . नोटेशन का उपयोग कर सकते हैं, जिसके लिए आप देख रहे हैं। मैं इसे इसलिए चाहता हूं ताकि मैं D का कार्यान्वयन कर सकूं, जो कि पाइथन के लिए Dee के समान है।रूबी में ट्यूपल्स का उपयोग करना?

+0

क्या तुमने कभी रूबी में विकास को लागू किया था? यदि हां, तो क्या आपके पास इसका लिंक है? मैं हाल ही में कुछ इसी तरह काम कर रहा हूं, और मुझे यह देखना अच्छा लगेगा कि आपने अभी तक क्या किया है। – dkubb

+1

नहीं; मैंने इसे अब तक कभी नहीं बनाया है। मैं कई अन्य चीजों के आसपास वापस जाने की कोशिश कर रहा हूं। मुझे कई पुस्तकालयों को मिला जो ऐसा लगता है जैसे वे मदद करेंगे: LazyList और arel। मैं मूल रूप से इस निष्कर्ष पर आया कि .NET में LINQ लगभग वहां था, फिर द्वीप मिला, जो भी करीब था। LazyList का उपयोग करना और डायरेक्ट-टू-एसक्यूएल रूपांतरण को हटा देना, जिसके बाद भी एक परियोजना लक्ष्य है, लगभग आपको वहां ले जाएगा। उस ने कहा, मुझे यह देखना अच्छा लगेगा कि अब तक आपके पास क्या है। मैं अभी भी वापस आने से थोड़ा दूर हूं। –

+0

महत्वाकांक्षा एक और दिलचस्प दिखने वाली लाइब्रेरी है, लेकिन इसे कुछ समय में अपडेट नहीं किया गया है। वह वह था जिसे मैंने पहले पाया था। ऐसा लगता है कि यह एक ही परंपरा में जारी रहा है। –

उत्तर

44

OpenStruct?

संक्षिप्त उदाहरण:

require 'ostruct' 

person = OpenStruct.new 
person.name = "John Smith" 
person.age  = 70 
person.pension = 300 

puts person.name  # -> "John Smith" 
puts person.age  # -> 70 
puts person.address # -> nil 
+0

यह _exactly_ है जो मैं खोज रहा था। धन्यवाद! –

+2

एनपी :) हालांकि आप का जवाब देने के लिए प्रश्न: नहीं, मैं रूबी में टुपल्स का उपयोग नहीं करता, खुलेस्ट्रक्चर या अन्यथा। मैं उच्च अंत में कक्षाओं का उपयोग करता हूं और कम अंत में हैश :) –

+9

यह एक खराब जवाब है, बस एक लिंक है? गंभीरता से? क्या होता है जब लिंक टूट जाता है? –

25

तथ्य यह है कि आप हैश और के बारे में बात के आधार पर। नोटेशन मैं मानता हूं कि आप (1. "a") सॉर्ट की तरह एक अलग तरह का ट्यूपल का मतलब है। आप शायद Struct कक्षा की तलाश में हैं। उदाहरण के लिए:

Person = Struct.new(:name, :age) 
me = Person.new 
me.name = "Guy" 
me.age = 30 
+0

यह करीब है, लेकिन इसे नाम देने के लिए मुझे बग्स। मैं कुछ (1. "ए") की तरह कुछ ढूंढ रहा था लेकिन संपत्ति के साथ आप वर्णन/सेट नोटेशन प्राप्त करते हैं। –

+6

@panesofglass, कुछ भी नाम देने की आवश्यकता नहीं है: a = Struct.new (: name,: age)। नया; a.name = "Guy" – paradoja

+0

क्या मैं 'a = Struct.new (: name,: age) 'सेट कर सकता हूं और बाद में कह सकता हूं। नया? मुझे ऐसा लगता है। मुझे इसे देखना होगा। मैं जो चाहता हूं उसके रूप में यह बहुत अधिक स्पष्ट होगा। –

9

हालांकि इस सख्ती से एक टपल नहीं है (सदस्यों के डॉट नोटेशन ऐसा नहीं कर सकते), आप एक सूची है, जो अक्सर गहरे लाल रंग का पास से जा रहा है के साथ मुद्दों का समाधान होगा से चरों की सूची प्रदान कर सकते हैं - जब आप वापसी मूल्यों की सूची के बाद होते हैं।

उदा।

:linenum > (a,b,c) = [1,2,3] 
:linenum > a 
    => 1 
:linenum > b 
    => 2 
:linenum > c 
    => 3 
2

आप destructuring के साथ कुछ समान कर सकते हैं:

def something((a, b)) 
    a + b 
end 

p something([1, 2]) 

यह 3 बाहर प्रिंट अपेक्षा के अनुरूप।

7

मैं Gem for Ruby tuples का लेखक हूं।

आप दो वर्गों के साथ प्रदान की जाती हैं:

सामान्य रूप में में
  • Pair
    • Tuple विशेष

    आप उन्हें अलग अलग तरीकों से प्रारंभ कर सकते हैं:

    Tuple.new(1, 2) 
    Tuple.new([1, 2]) 
    Tuple(1, 2) 
    Tuple([1, 2]) 
    Tuple[1, 2] 
    

    दोनों कक्षाओं में कुछ सहायक तरीके हैं:

    • length/arity - जो टपल
    • first/last/second (केवल जोड़ी) के अंदर मानों की संख्या देता है - जो एक इसी तत्व देता है
    • [] कि आप किसी विशेष तत्वों के लिए एक पहुँच देता है
  • 0

    आप इस चाल के साथ स्कैला टुपल्स का नकल कर सकते हैं:

    Tuple = Struct.new(:_1, :_2) 
    
    2.2.5 :003 > t = Tuple.new("a", "b") 
    => #<struct Tuple _1="a", _2="b"> 
    2.2.5 :004 > t._1 
    => "a" 
    2.2.5 :005 > t._2 
    => "b" 
    

    लेकिन यहाँ आप नहीं हो सकता destructuring:

    2.2.5 :012 > a, b = t 
    => {:_1=>"a", :_2=>"b"} 
    2.2.5 :013 > a 
    => {:_1=>"a", :_2=>"b"} 
    2.2.5 :014 > b 
    => nil 
    

    लेकिन इस चाल के लिए धन्यवाद: https://gist.github.com/stevecj/9ace6a70370f6d1a1511 destructuring काम करेगा:

    2.2.5 :001 > Tuple = Struct.new(:_1, :_2) 
    => Tuple 
    2.2.5 :002 > t = Tuple.new("a", "b") 
    => #<struct Tuple _1="a", _2="b"> 
    2.2.5 :003 > t._1 
    => "a" 
    2.2.5 :004 > class Tuple ; def to_ary ; to_a ; end ; end 
    => :to_ary 
    2.2.5 :005 > a, b = t 
    => #<struct Tuple _1="a", _2="b"> 
    2.2.5 :006 > a 
    => "a" 
    2.2.5 :007 > b 
    => "b" 
    
    संबंधित मुद्दे