रूबी संहिता अनुवाद अनुरोध

वोट
0

मैं नगण्य रूबी वाक्य रचना ज्ञान है और उम्मीद कर रही थी किसी छद्म कोड में समारोह नीचे अनुवाद करने के लिए और संभवतः यह कैसे कहा जा सकता है की एक उदाहरण प्रदान तरह पर्याप्त होगा?

def in_list(num, list) 
   list = [*list] 
   list.each {|a,b| return (b)? num.sub(a,b) : a if num =~ a} 
   nil 
end
15/07/2009 को 10:51
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
12

वाह। यही कारण है कि कुछ बदसूरत गहरे लाल रंग का है।

तो numयहाँ वास्तव में एक है Stringके उपयोग किया जा रहा है (टिप नापसंद #subऔर #=~तरीके।

listएक है Arrayकी

  • Regexp वस्तुओं और / या
  • के जोड़े Regexpऔर प्रतिस्थापन Stringवस्तुओं।

दिए गए में से कोई भी अगर Regexpरों स्ट्रिंग, विधि रिटर्न से मेल खाते हैं nil

एक unpaired तो Regexpस्ट्रिंग से मेल खाता, विधि देता है कि Regexp

किसी युग्मित तो Regexpस्ट्रिंग से मेल खाता, विधि स्ट्रिंग के भाग कि विकल्प Regexpबनती प्रतिस्थापन पाठ के साथ मेल खाता है, और रिटर्न संशोधित String

एक बार एक Regexpस्ट्रिंग से मेल खाता, विधि देता है - कोई बाद में Regexpरों माना जाता है।

कोई मामलों में मूल है Stringसंशोधित।

यह वास्तव में एक Franken-विधि, IMHO है, क्योंकि यह बहुत अलग काम करने की कोशिश कर रहा है।

एक उदाहरण कॉल:

 in_list("abe lincoln", [ [/linc/, 'zelda'] ]) #=> "abe zeldaoln"
 in_list("abe lincoln", [ [/linc/] ]) #=> /linc/
 in_list("abe lincoln", [ [/link/] ]) #=> nil

वास्तव में, वापसी प्रकार की है कि भीड़ के साथ, यह पिछवाड़े से इसके लायक है में एक दर्द के और अधिक की तरह लगता है।

छद्म कोड में

  डीईएफ़ में - सूची ( पाठ , regexps )
    Foreach regexp में regexps 
      यदि HAS मैचों ( पाठ , regexp )
        यदि HAS-प्रतिस्थापन-पाठ ( regexp )
          रिटर्न REPLACE-मिलान-भाग ( पाठ , regexp , प्राप्त-प्रतिस्थापन-पाठ ( regexp ))
        अन्य
          रिटर्न regexp
        अगर अंत
      अगर अंत
    ENDFOREACH
    रिटर्न कुछ नहीं पाया
  ENDDEF

लेकिन जैसे मैंने कहा, यह कुछ बदसूरत गधे गहरे लाल रंग का है। मैं इसके उपयोग से बचने चाहते हैं। यह एक codesmell कि मुझसे कहता है ऐसा और भी बहुत इस कोड के साथ गलत है।

अगर मैं की एक सरणी था Regexps, और पहले एक है कि कुछ मेल खाने वाले टेक्स्ट को खोजना चाहते थे मुझे क्या करना चाहते हैं:

# general case
regexps.find { |re| text =~ re }
# example
[ /earn/, /more/, /sessions/, /by/, /sleaving/ ].find { |re| "A baby?" =~ re } # would return /by/

अगर मैं का एक संग्रह था Regexp, प्रतिस्थापन पाठ जोड़े, और मैं कुछ पाठ में पहले मैच को बदलने के लिए चाहता था, मैं यह कर चाहते हैं

# general case
text_dupe = text.dup
pairs.find { |re,replace| text_dupe.sub!( re, replace ) }
# example
text_dupe = "One two three four".dup
[ [/ape/, 'frog'], [/our/, 'my'] ].find { |re,replace| text_dupe.sub!( re, replace } } # would return "One two three fmy"

मैं नहीं बल्कि एक का उपयोग करेंगे Hashपिछले वास्तव में के लिए, लेकिन, मैंने नहीं किया (मुझे लगता है कि महत्वपूर्ण नहीं है, नहीं जानते हुए भी उसके उपयोग के तरीके कहने के लिए और कौन हूँ) के बाद से है कि आदेश मूल सूची में आया था खो देता है।

15/07/2009 को 12:03
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more