Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

wrong number of arguments (0 for 1) (ArgumentError) Não consigo resolver

Abaixo está um pequeno código que desenvolvi só para testar:

def editar_dados
  puts "Qual o seu nome?"
  pegar_nome = gets.chomp
  pegar_nome
end

def imprimir_dados(nome)
    puts nome + " teste concluído."
    puts "\n" + "seu nome foi armazenado".upcase
end

nome=editar_dados
imprimir_dados

Ao executar o código ocorre o seguinte

C:\ruby21\programas>ruby dado_privado1.rb
Qual o seu nome?
paulo
dado_privado1.rb:8:in `imprimir_dados': wrong number of arguments (0 for 1) (ArgumentError)
        from dado_privado1.rb:14:in `<main>'

C:\ruby21\programas>

Como deveria se comportar:

C:\ruby21\programas>ruby dado_publico.rb
Qual o seu nome?
paulo
PAULO teste concluído.

SEU NOME FOI ARMAZENADO

C:\ruby21\programas>

Quase ia me esquecendo, quando tiro o '(nome)' da linha de comando:

def imprimir_dados(nome)

ou seja:

def imprimir_dados

O resultado é:

C:\ruby21\programas>ruby dado_privado1.rb
Qual o seu nome?
paulo
dado_privado1.rb:9:in `imprimir_dados': undefined local variable or method `nome' for main:Object (NameError)
        from dado_privado1.rb:14:in `<main>'

C:\ruby21\programas>

Não consigo entender, se em um código simples como esse não consigo solução, como será em algo mais complexo?

3 respostas

Você esquceu de o argumento na chamada da função:

nome=editar_dados
imprimir_dados

Porém você tem que alterar essa segunda linha para:

nome=editar_dados
imprimir_dados(nome)

Não consigo entender, se em um código simples como esse não consigo solução, como será em algo mais complexo?

Acontece, durante o aprendizado, falhamos em alguns pontos, mas o ideal é continuar buscando ajuda e progredindo aos poucos. Boa sorte com os estudos.

solução!

William, muito obrigado, sou iniciante nesse assunto e esses detalhes acabam escapando. Muito obrigado.

Só faltou marcar como solução minha resposta. rsrs... Esta marcada sua resposta como solução