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

272
Vistas
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 Respuestas
Responde la pregunta

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 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