Solicitud de traducción de código Ruby

votos
0

Tengo un conocimiento de sintaxis de Ruby despreciable y esperaba que alguien tuviera la amabilidad de traducir la función siguiente en seudocódigo y posiblemente proporcionar un ejemplo de cómo se llamaría.

def in_list(num, list) 
   list = [*list] 
   list.each {|a,b| return (b)? num.sub(a,b) : a if num =~ a} 
   nil 
end
Publicado el 15/07/2009 a las 10:51
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
12

Guau. Es un rubí feo.

Así que numaquí está realmente una String(las propinas son el uso de los métodos #suby #=~.

listes una Arrayde

  • Regexp objetos y / o
  • pares de Regexpy Stringobjetos de reemplazo .

Si ninguno de los Regexps dados coincide con la cadena, el método retorna nil.

Si un desemparejamiento Regexpcoincide con la cadena, el método lo devuelve Regexp.

Si un emparejado Regexpcoincide con la cadena, el método sustituye la parte de la cadena que Regexpcoincide con el texto de reemplazo emparejado y devuelve el modificado String.

Una vez que a Regexpcoincide con la cadena, el método regresa - no más tarde Regexpse consideran.

En ningún caso es el original Stringmodificado.

Es realmente un método franco, en mi humilde opinión, ya que está tratando de hacer cosas muy diferentes.

Una llamada de ejemplo:

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

Realmente, con esa multitud de tipos de devolución, parece más doloroso de lo que vale.

En pseudo-código

  DEF IN - LIST ( texto , expresiones regulares )
    FOREACH regexp IN regexps 
      IF HAS-MATCH ( texto , regexp )
        SI TIENE REEMPLAZO-TEXTO ( regexp )
          RETORNO REPLACE-emparejados PARTE ( texto , expresión regular , GET-SUSTITUCIÓN DE TEXTO- ( expresión regular ))
        MÁS
          REGRESAR regexp
        TERMINARA SI
      TERMINARA SI
    ENDFOREACH
    DEVOLVER NADA ENCONTRADO
  ENDDEF

Pero como dije, este es un rubí feo. Evitaría usarlo. Es un código que me dice que hay un montón de errores con este código.

Si tuviera una matriz de Regexps, y quisiera encontrar la primera que concuerde con algún texto, lo haría:

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

Si tuviera una colección de Regexppares de texto de reemplazo y quisiera reemplazar la primera coincidencia en algún texto, haría esto

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

Prefiero usar una Hashpara el final en realidad, pero como eso pierde el orden en que entró la lista original (y quién soy yo para decir que no es importante, sin saber cómo se usa), no lo hice.

Respondida el 15/07/2009 a las 12:03
fuente por usuario

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