¿Qué significan los valores $ 1, $ 2, $ ', $ `en Ruby?¿Cuáles son las variables globales numeradas de Ruby?
Respuesta
Son capturas de la última coincidencia de patrones (al igual que en Perl; Rubí inicialmente levantó una gran cantidad de sintaxis de Perl, aunque es en gran parte ya lo he superado :). $1
, $2
, etc. refieren a capturas paréntesis dentro de una expresión regular: dado /a(.)b(.)c/
, $1
será el carácter entre a
y b
y $2
el carácter entre b
y c
. $`
y $'
significan las cadenas antes y después de la cadena que coincidió con la expresión regular completa (que a su vez está en $&
), respectivamente.
En realidad, esto tiene algún sentido, aunque solo sea históricamente; puede encontrarlo en perldoc perlvar
, que generalmente hace un buen trabajo al documentar los mnemotécnicos y el historial de las variables de Perl, y sobre todo se aplica a los globales en Ruby. Las capturas numeradas son reemplazos para la sintaxis de regex de retrospectiva de captura (\1
, \2
, etc.); Perl cambió de lo primero a lo último en alguna parte de las versiones 3.x, porque el uso de la sintaxis de retroreferencia fuera de la expresión regular complicó demasiado el análisis. (En el momento Perl 5 dio la vuelta, el analizador había sido suficientemente reescrito que la sintaxis estaba nuevamente disponible, y reutilizado rápidamente para referencias/"punteros". Ruby optó por usar una cita de nombre :
, que está más cerca de Lisp y Estilo Smalltalk, dado que Ruby comenzó como un Perl-like con estilo O Smalltalk, esto tenía más sentido lingüístico.) Lo mismo se aplica a $&
, que en la sintaxis histórica de regex es simplemente &
(pero no puede usar eso fuera del reemplazo parte de una sustitución, por lo que se convirtió en una variable $&
en su lugar). $`
y $'
son "cursi": "cita inversa" y "cita futura" de la cadena coincidente.
las no numeradas se listan aquí:
http://www.zenspider.com/Languages/Ruby/QuickRef.html#19
$1, $2 ... $N
se refieren a partidos en un grupo de captura de expresiones regulares.
Así:
"ab:cd" =~ /([a-z]+):([a-z]+)/
cedería
$1 = "ab"
$2 = "cd"
Parece que te perdiste un corchete de apertura ([) en la expresión después de dos puntos. Debería ser "ab: cd" = ~/([a-z] +): ([a-z] +) / –
- 1. ¿Las variables de instancia son las nuevas variables globales?
- 2. ASP.NET C# Las variables estáticas son globales?
- 3. Ruby on Rails - ¿Variables globales?
- 4. las variables globales son nulas cuando se usa PHPUnit
- 5. ¿Las variables fuera de las funciones son un tipo de variables globales?
- 6. Imprimir todas las variables globales/variables locales?
- 7. Haciendo todas las variables globales
- 8. variables globales en C++
- 9. ¿Cuáles son las otras variables de entorno heroku?
- 10. ¿Cuáles son estas extrañas variables de entorno?
- 11. ¿Cuáles son las alternativas de Wordpress para Ruby on Rails?
- 12. ¿Cuáles son las ventajas de usar Ruby NArray sobre Array?
- 13. ¿Las constantes globales son un antipatrón?
- 14. C++ de variables globales
- 15. ¿Cuáles son mis variables de entorno?
- 16. Crear múltiples variables numeradas basadas en int
- 17. ¿Cuáles son tus encuadernaciones de teclas globales favoritas en emacs?
- 18. ¿Cuáles son todas las "convenciones" para Ruby on Rails?
- 19. Hacer todas las variables globales, PHP
- 20. Confusión sobre las variables globales en python
- 21. ¿Cuáles son las características del código de spaghetti?
- 22. Variables globales y MPI
- 23. ¿Cuáles son los comandos importantes de Ruby?
- 24. C: ¿Son globales las directivas #define?
- 25. ¿Debo usar variables globales?
- 26. ¿Cuáles son las ventajas de Lazy Evaluation?
- 27. objetivo-c - variables globales
- 28. Variables globales en hadoop
- 29. variables globales en RequireJS
- 30. Variables globales con GO
Creo que significan que el desarrollador de Ruby cree que está siendo inteligente al elegir nombres de variables crípticos. – aroth
Tendrás que culpar a lwall por ellos, en realidad; Ruby los importó al por mayor de Perl. – geekosaur
@geekosaur, no necesariamente, por lo que recuerdo, Larry Wall los importó de awk. El rubyista podría usar $ POSTMATCH por $ ', $ PREMATCH por $ 'luego de requerir" English ". – Arie