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

275
Visualizações
Proc.arity en ruby-3.0.2 vs ruby-2.XX

Eche un vistazo a la siguiente desviación al ejecutar exactamente el mismo código:

Rubí-3.0.2:

 3.0.2 :001 > id = :id 3.0.2 :002 > puts id.to_proc.arity.abs 2

Rubí-2.7.4:

 2.7.4 :001 > id = :id => :id 2.7.4 :002 > puts id.to_proc.arity.abs 1

Captura de pantalla para evidencia de ejecución: 2.7.4 vs 3.0.2

Usé 2.7.4. Sin embargo, cualquier 2.XX devuelve "1".

¿Se trata de algún tipo de problema de compatibilidad con BWD o de un cambio documentado? Gracias

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La aridad de un método o proceso puede ser un valor positivo o negativo. Si es positivo, el método/proc acepta un número estático de argumentos con el número que representa el número de argumentos requeridos.

Si la aridad es negativa (como es el caso de esos procesos), el método/proc acepta un número variable de argumentos. El número devuelto le da la cantidad de argumentos requeridos como -1 - n siendo n la cantidad de argumentos requeridos.

Ahora, para el resultado de Symbol#to_proc , la aridad más correcta es -2 , ya que tiene que pasar un argumento (es decir, el receptor donde se llamará al método que representa el símbolo) más cualquier cantidad de argumentos adicionales (que se pasarán a lo largo de como argumentos de método).

En versiones anteriores de Ruby, el proceso devuelto se definía para aceptar cualquier número de argumentos, similar a lambda { |*args| ... } . Luego, el "cuerpo" del proceso verificó la cantidad de argumentos y planteó si había muy pocos argumentos.

Sin embargo, en Ruby 3.0, el proceso devuelto se define de forma similar a lambda { |receiver, *args| ... } Aquí, la interfaz del proceso deja más claro que hay un solo argumento requerido y cualquier número de argumentos opcionales.

El comportamiento del proceso en sí no cambió mucho (pero vea a continuación). Como en ambos casos, la implementación interna se optimizó en gran medida, ambas versiones verifican la cantidad de argumentos en el código C en la implementación del proceso y manejan los argumentos por sí mismos.

Sin embargo, con Ruby 3.0, el Proc devuelto es un lambda, ya que en realidad se comporta como un lambda en lugar de un proc con respecto al manejo de argumentos (y siempre lo ha hecho). Esto se cambió en https://bugs.ruby-lang.org/issues/16260 .

Como tal, el comportamiento en sí no ha cambiado, solo la interfaz anunciada se actualizó en Ruby 3.0 para reflejar mejor el comportamiento real del proceso.

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