Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda