Wow. To je nějaký ošklivý ruby.
Takže numtady je vlastně String(hrot off bytí užívání #suba #=~metod.
listje Arrayz
Regexp objektů a / nebo
- páry
Regexpa náhradní Stringobjekty.
Pokud žádný z výše uvedených Regexps odpovídala řetězec, vrací metoda nil.
Pokud je nepárová Regexpodpovídá řetězec, vrací metoda, která Regexp.
Pokud se spárované Regexpodpovídá řetězec, metoda nahradí část řetězce, že Regexpzápasy s párovým nahrazení textu a vrátí změněný String.
Jakmile se Regexpshoduje řetězec, vrací metoda - nejpozději Regexps jsou považovány.
V žádném případě je původní Stringupravený.
Je to opravdu franken metoda, IMHO, protože se snaží dělat velmi odlišné věci.
Příklad volání:
in_list("abe lincoln", [ [/linc/, 'zelda'] ]) #=> "abe zeldaoln"
in_list("abe lincoln", [ [/linc/] ]) #=> /linc/
in_list("abe lincoln", [ [/link/] ]) #=> nil
Skutečně, s tímto množstvím typů vratných, vypadá to, že větší bolest v zadku, než to stojí za to.
V pseudo-code
DEF IN - SEZNAM ( textové , regexps )
Foreach regexp IN regexps
IF HAS-MATCH ( textu , regexp )
IF HAS-VÝMĚNA-TEXT ( regexp )
RETURN REPLACE-uzavřeno dávkou ( textu , regexp , GET-VÝMĚNA-TEXT ( regexp ))
JINÝ
RETURN regexp
ENDIF
ENDIF
ENDFOREACH
RETURN NIC nalezenou
enddef
Ale jak jsem řekl, je to nějaký ošklivý-ass ruby. Já bych se zabránilo jeho použití. Je to pachy v kódu, který mi říká, že je tu spoustu s tímto kódem v pořádku.
Kdybych měl řadu Regexpsa chtěl najít první ten, který odpovídal nějaký text, udělám:
# general case
regexps.find { |re| text =~ re }
# example
[ /earn/, /more/, /sessions/, /by/, /sleaving/ ].find { |re| "A baby?" =~ re } # would return /by/
Kdybych měl sbírku Regexp, výměna textových párů, a chtěl jsem, aby nahradit první zápas v nějakém textu, tak bych to udělat
# 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"
Raději bych použít Hashpro poslední ve skutečnosti, ale vzhledem k tomu, že ztrácí pořadí původní seznam je přiložen v (a kdo jsem já, abych řekl, že to není důležité, neví, jak se to používá), já ne.