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