Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

231
Vistas
¿Por qué llamar a pp pp no se repite?

Si asigno un valor a la variable pp y luego llamo a pp pp en la consola, ¿por qué no se imprime bastante?

 $ irb pp = "hello world" => "hello world" pp pp "hello world" => "hello world"

De acuerdo con esta explicación, creo que debería

https://blog.brycekerley.net/2014/08/27/Trabajando-con-pp-the-Ruby-Pretty-Printer.html

Editar: no quise decir que debe repetirse, solo quería saber el orden de llamada al método que sucedió y que evitó que se reprodujera.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Ruby es un lenguaje interpretado, lo que significa que, en lugar de compilar, ejecuta el código tal como está escrito, interpretando el código línea por línea, palabra por palabra (o más bien token por token).

Cuando el intérprete de ruby encuentra una línea pp pp , necesita resolver dos tokens. El primero es claramente un método ya que toma un argumento, el otro puede ser un método O una variable local (no hay paréntesis ni argumentos).

Entonces, durante la ejecución, Ruby comenzará la resolución desde el segundo token. Cuando no está claro si token denota variable o método, Ruby siempre busca primero la variable . En este caso, la variable está allí ya que asignó un valor a pp creando una variable local (digamos por pp = 1 ).

Luego, Ruby todavía tiene que procesar el segundo token, pero ahora parece pp(1) (porque el primer token ya se resolvió). En este caso, esto es, nuevamente, claramente un método, por lo que Ruby simplemente pp un mensaje de aplicación a self (que en este contexto es el objeto (principal)). El método pp está definido en Kernel, por lo que cada objeto, incluido (main) , puede acceder a él.

El punto clave aquí es comprender que no ha anulado el método pp ; ese método todavía está allí. Lo único que sucedió es una resolución diferente del token pp . Incluso con pp oculto (o sombreado) por la variable local, aún puede invocarlo usando self.pp explícito o asegurándose de que se vea como un método pp()

over 4 years ago · Santiago Trujillo Denunciar

0

Me estoy arriesgando mucho aquí (principalmente por diversión) y supongo que haces algo como esto

 >> pp "this is a test" "this is a test" => "this is a test" >> pp = pp => nil >> pp pp nil => nil >> pp "this is another test" "this is another test" => "this is another test"

Así que esto es lo que sucede

 pp = pp

Ha creado una variable local pp a la que se le asignó un valor de cualquier método pp devuelto ( nil en este caso)

 >> pp pp

aquí llamas al método pp y le pasas la variable pp , que contiene nil

 >> pp "this is another test" "this is another test" => "this is another test"

todavía puede llamar al método pp como de costumbre.

No estoy seguro de por qué esperarías que se reprodujera. Las expresiones se evalúan (de derecha a izquierda en general), por lo que eventualmente se evaluarán. En general, no deberían ocurrir bucles infinitos. Toma este ejemplo:

 x = y = z = x

Primero evaluará x más a la derecha (que no se ha definido, por lo que el valor predeterminado es nil , por lo que el próximo paso conceptualmente será:

 x = y = z = nil

asigna cero a z, y el resultado de esta evaluación también es cero

 x = y = nil

asigna cero a y y así sucesivamente...

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda