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

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

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

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