Ruby Code Translation kérése

szavazat
0

Van elhanyagolható Ruby szintaxis ismerete és reméltem, hogy valaki lenne olyan kedves, hogy lefordítja az alábbi függvény a pszeudo-kód és esetleg példát arra, hogyan fogják nevezni?

def in_list(num, list) 
   list = [*list] 
   list.each {|a,b| return (b)? num.sub(a,b) : a if num =~ a} 
   nil 
end
A kérdést 15/07/2009 10:51
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
12

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.

Válaszolt 15/07/2009 12:03
a forrás felhasználó

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