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

401
Vistas
ArgumentError con parámetros opcionales

Puede alguien ayudarme con esto:

rubí 2.7.3p183

Aquí está la situación, este método:

 def send_request(url, payload = {}, internal_proxy: true) ...

y esta llamada

 send_request('random_address', { foo: :bar })

me devuelve:

 Traceback (most recent call last): 5: from C:/Ruby27-x64/bin/irb.cmd:31:in `<main>' 4: from C:/Ruby27-x64/bin/irb.cmd:31:in `load' 3: from C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/irb-1.2.6/exe/irb:11:in `<top (required)>' 2: from (irb):4 1: from (irb):1:in `send_request' ArgumentError (unknown keyword: :foo)

Entiendo que está tratando de hacer coincidir los parámetros opcionales, pero ¿por qué? ¿No debería la variable 'carga útil' recibir el parámetro? Traté de buscar una explicación, pero parece que no puedo encontrar ninguna.


Solía usar la variable internal_proxy como carga útil;

 def send_request(url, payload = {}, internal_proxy = true)

pero rubocop me avisa;

 Use keyword arguments when defining method with boolean argument. (convention:Style/OptionalBooleanParameter)

¿El hash en el primer parámetro no opcional siempre cuenta como argumento de palabra clave? Si es así, ¿cómo puedo obtener el comportamiento esperado que mencioné anteriormente? (a menos que sea una mala práctica por alguna razón)

¿Es esto un error, o hay una razón para esto?

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

0

En Ruby < 3.0, si el último argumento es un hash y el método que se llama acepta argumentos de palabras clave, siempre se convierte en argumentos de palabras clave.

Ruby 3.0 soluciona esto.

Debería actualizar a Ruby 3.0 si puede, o pensar en una API diferente.

over 4 years ago · Santiago Trujillo Denunciar

0

Una posible solución para su problema es cambiar el orden de sus parámetros de la siguiente manera:

 def send_request(url, internal_proxy: true, **payload) p payload p 'fooo' end send_request('asd', {foo: :bar}) send_request('asd')

El código anterior debería realizar el comportamiento que está buscando. Además, la introducción del símbolo doble (**) recopila todas las palabras clave adicionales con nombre como un parámetro hash. La primera llamada imprimirá el hash {foo: :bar} y la segunda llamada imprimirá un hash vacío {} puede probar el fragmento anterior aquí

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