2009/7/10 Pablo Herrero <[email protected]>
> El 9 de julio de 2009 23:50, NachoKB<[email protected]> escribió:
> Esto me funciona por ejemplo:
>
> r1 = /À/u
> r3 = /À/u
> r3 = /À/u
>
> r1 =~ "asd À asd "
> r2 =~ "as"
>
> r1 == r3 # devuelve true
> r2 == r3 # devuelve true
>
> Podrias postear como es tu codigo?
>
>
Pablo, yo venía probando, como OP, con los caracteres Unicode escapados, o
sea que en vez de usar À directamente usaba \303\200... Debido a esto (todos
mis ejemplos con $KCODE == "UTF8")
irb(main):061:0* a = "À"
> => "À"
> irb(main):062:0> b = "\303\200"
> => "À"
> irb(main):063:0> a == b
> => *true*
>
Ahora probé como lo ponés vos, que, según entiendo, debería ser equivalente
(supondría que crearía la misma Regexp, de hecho). Y encuentro esto:
irb(main):064:0> c = /\303\200/
> => /\303\200/
> irb(main):065:0> d = /À/
> => /À/
> irb(main):066:0> c == d
> => *false*
>
Por lo tanto, la prueba que nos compete es:
irb(main):046:0* res = [ /\303\200/, /\303\200/u, /À/, /À/u ]
> => [/\303\200/, /\303\200/u, /À/, /À/u]
> irb(main):047:0> res.map &:hash
> => [-*279873035*, -279873035, *429036*, 429036]
> irb(main):048:0> res.each { |re| re === "hola" }
> => [/\303\200/, /\303\200/u, /À/, /À/u]
> irb(main):049:0> res.map &:hash
> => [-*403010555*, -403010555, *429036*, 429036]
>
De aquí saco que especificar /u (al menos con el $KCODE en utf) le da lo
mismo (no lo conocía, por eso ante tu post tuve que investigar un poco).
Pero lo más importante: *crear las Regexps utilizando los caracteres
especiales en lugar de su escaping no dispara este bug*...
Por otro lado, me parece que hay 2 bugs: (1) /À/ != /\303\200/ y (2) el bug
que encontró Aureliano (que una Regexp cambia su estado interno -- y lo
expone via hash -- sin avisar y por aparentemente nada). Estos dos podrían
reportarse. Por otro lado ¿alguien tiene a mano un Ruby 1.9 y un JRuby para
probar esto mismo
Aureliano, me parece que (siendo un poco macho, cuidando de que el encodings
de los archivos donde esto se guarda no se pierda y probando) preferiría
declarar las regexps con los caracteres directamente en lugar de su escaping
(para evitar el monkey patch).
nachokb
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar