Richiesta Rubino Codice Traduzione

voti
0

Ho trascurabile la conoscenza della sintassi Ruby e speravo che qualcuno sarebbe così gentile da tradurre la seguente funzione in pseudo codice e, eventualmente, fornire un esempio di come si sarebbe chiamato?

def in_list(num, list) 
   list = [*list] 
   list.each {|a,b| return (b)? num.sub(a,b) : a if num =~ a} 
   nil 
end
È pubblicato 15/07/2009 alle 10:51
fonte dall'utente
In altre lingue...                            


1 risposte

voti
12

Wow. Questo è un po 'brutto rubino.

Così numqui è in realtà un String(i offs di punta è l'uso della #sube #=~metodi.

listè una Arraydi

  • Regexp oggetti e / o
  • coppie di Regexpe pezzi Stringoggetti.

Se nessuno dei dati Regexps hanno la stringa, il metodo restituisce nil.

Se un spaiato Regexpcorrisponde alla stringa, il metodo restituisce tale Regexp.

Se un Paired Regexpcorrisponde alla stringa, il metodo sostituisce la parte della stringa che le Regexppartite con il testo sostitutivo abbinato, e restituisce la modifica String.

Una volta che una Regexpcorrisponde alla stringa, il metodo restituisce - entro e non Regexps sono considerati.

In nessun caso è l'originale Stringmodificato.

E 'davvero un Franken-metodo, secondo me, dal momento che sta cercando di fare cose molto diverse.

Un esempio di chiamata:

 in_list("abe lincoln", [ [/linc/, 'zelda'] ]) #=> "abe zeldaoln"
 in_list("abe lincoln", [ [/linc/] ]) #=> /linc/
 in_list("abe lincoln", [ [/link/] ]) #=> nil

In realtà, con quella moltitudine di tipi di ritorno, sembra più di un dolore nel culo di quel che vale.

In pseudo-codice

  DEF IN - LISTA ( testo , espressioni regolari )
    Foreach regexp IN espressioni regolari 
      SE HA-PARTITA ( testo , regexp )
        SE HA-SOSTITUZIONE-TEXT ( regexp )
          RITORNO REPLACE-matched-PARTE ( testo , regexp , GET-SOSTITUZIONE-TEXT ( regexp ))
        ALTRO
          RITORNO regexp
        FINISCI SE
      FINISCI SE
    endforeach
    RITORNO NULLA-TROVATO
  ENDDEF

Ma come ho detto, questo è un brutto-ass rubino. Eviterei di usarlo. E 'un code smell che mi dice che c'è un bel po' di sbagliato in questo codice.

Se ho avuto una serie di Regexps, e volevo trovare il primo che ha trovato un testo, mi piacerebbe fare:

# general case
regexps.find { |re| text =~ re }
# example
[ /earn/, /more/, /sessions/, /by/, /sleaving/ ].find { |re| "A baby?" =~ re } # would return /by/

Se avessi una collezione di Regexp, coppie di testo di sostituzione, e ho voluto sostituire la prima partita di un testo, mi piacerebbe fare questo

# 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"

Preferisco utilizzare una Hashper l'ultimo in realtà, ma dal momento che perde l'ordine della lista originale è venuto a (e chi sono io per dire che non è importante, non sapendo come viene usato), non l'ho fatto.

Risposto il 15/07/2009 a 12:03
fonte dall'utente

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