Łał. To jakiś brzydki rubin.
Więc numtutaj jest rzeczywiście String(końcówkę offs będące korzystanie z #subi #=~metod.
listjest Arrayod
Regexp obiektów i / lub
- par
Regexpi zamienne Stringobiektów.
Jeśli żadna z podanych Regexps dopasować ciąg, zwracany przez metodę nil.
Jeżeli nieparzysty Regexpdopasowuje ciąg, metoda zwraca to Regexp.
Jeśli połączonemu Regexpdopasowuje ciąg, metoda zastępuje część napisu, że Regexpmecze ze skojarzonym tekstu zastępczego i zwraca zmodyfikowany String.
Gdy Regexpdopasowuje ciąg, metoda zwraca - nie później Regexps są uznawane.
W żadnym przypadku nie jest oryginalny Stringzmodyfikowane.
To naprawdę Franken-metoda, IMHO, ponieważ stara się robić bardzo różne rzeczy.
Przykładem połączenia:
in_list("abe lincoln", [ [/linc/, 'zelda'] ]) #=> "abe zeldaoln"
in_list("abe lincoln", [ [/linc/] ]) #=> /linc/
in_list("abe lincoln", [ [/link/] ]) #=> nil
Naprawdę, z tym wielu rodzajów powrotów, wydaje się bardziej upierdliwy niż to warte.
Pseudo-kod
DEF IN - LISTA ( tekst , wyrażenia regularne )
ForEach Regexp W wyrażeniach
IF HAS-match ( tekst , Regexp )
IF HAS zastępczej tekście ( wyrażenia regularne )
RETURN WYMIENIĆ dopasowane porcjowa ( tekst , regexp , GET-WYMIANA-TEXT ( regexp ))
JESZCZE
RETURN regexp
ENDIF
ENDIF
endforeach
RETURN NIC-FOUND
ENDDEF
Ale jak powiedziałem, to jest jakaś brzydka dupa rubin. Chciałbym uniknąć korzystania z niej. Jest to zapachy kodu, który mówi mi, że dużo złego z tym kodem.
Gdybym miał tablicę Regexps, i chcieliśmy znaleźć się pierwszy pasujący tekst, chciałbym zrobić:
# general case
regexps.find { |re| text =~ re }
# example
[ /earn/, /more/, /sessions/, /by/, /sleaving/ ].find { |re| "A baby?" =~ re } # would return /by/
Gdybym miał kolekcję Regexp, par tekst zastępczy, a ja chciałem wymienić pierwszy mecz w jakimś tekście, chciałbym to zrobić
# 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"
Wolę używać Hashza ostatni faktycznie, ale ponieważ traci kolejność oryginalna lista dołączonej (i kim jestem, by powiedzieć, że nie jest ważne, nie wiedząc, w jaki sposób jest on wykorzystywany), ja nie.