Azta. Ez valami ronda rubin.
Tehát numitt valójában egy String(a csúcs off, hogy a használata a #subés #=~módszereket.
listegy Arraya
Regexp tárgyak és / vagy
- pár
Regexpés a csere Stringtárgyak.
Ha egyik megadott Regexps egyezik a húr, akkor az eljárás visszatér nil.
Ha egy páratlan Regexpegyezik a húr, az eljárás visszatér, hogy Regexp.
Ha a párosított Regexpegyezik a húr, és az eljárás helyettesíti a részét a húr, hogy a Regexpmérkőzést a párosított helyettesítő szöveget, és visszaadja a módosított String.
Ha egy Regexpmérkőzés a húr, az eljárás visszatér - legkésőbb Regexps tartják.
Egyik esetben sem az eredeti Stringmódosítani.
Ez tényleg egy Franken-módszer, IMHO, mert próbál csinálni nagyon különböző dolog.
Egy példa hívás:
in_list("abe lincoln", [ [/linc/, 'zelda'] ]) #=> "abe zeldaoln"
in_list("abe lincoln", [ [/linc/] ]) #=> /linc/
in_list("abe lincoln", [ [/link/] ]) #=> nil
Tényleg, azzal számos visszatérő típusok, úgy tűnik, inkább a fájdalom a csacsi, mint amennyit ér.
A pszeudo-kód
DEF IN - LISTA ( szöveg , regexek )
Foreach regexp IN regexek
IF MTA-MATCH ( szöveg , regexp )
IF HAS-CSERE-TEXT ( regexp )
RETURN CSERE illesztett-PORTION ( szöveg , regexp , GET-CSERE-TEXT ( regexp ))
MÁS
VISSZA regexp
ENDIF
ENDIF
endforeach
RETURN SEMMI-found
ENDDEF
De mint mondtam, ez valami csúnya-ass rubin. Azt ne használja azt. Ez egy codesmell hogy azt mondja, van egy csomó baj ezzel a kóddal.
Ha volt egy sor Regexps, és azt akarta, hogy megtalálja az első, amelyik illeszkedik egy szöveget, azt csinálni:
# general case
regexps.find { |re| text =~ re }
# example
[ /earn/, /more/, /sessions/, /by/, /sleaving/ ].find { |re| "A baby?" =~ re } # would return /by/
Ha volt egy gyűjteménye Regexp, helyettesítő szöveget pár, és azt akarta cserélni az első mérkőzés a szöveget, én ezt
# 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"
Inkább használni Hashaz utolsó valóban, de mivel ez elveszti a sorrendben az eredeti lista jött (és ki vagyok én, hogy azt mondják, hogy ez nem fontos, nem tudva, hogyan használják), nem tettem.