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

Minha variável não está retornando

código simples

def lalala

macaco = 12

return macaco

end

lalala

if macaco == 12

puts "ok"

end

erro: λ ruby Testes.rb Testes.rb:8:in <main>': undefined local variable or methodmacaco' for main:Object (NameError)

isso acontece sempre que tento retornar variáveis, é como se ela não estivesse retornando. apenas funciona quando uso variáveis globais

6 respostas

Escopo de variavel a variavel macaco só é valida dentro da funcao lalala e você esta comparando ela fora onde ela não existe mais.

Mikhael, Tente atribuir o retorno do método a outra variável no escopo que esta fora do método. Conforme esta abaixo.


def lalala 

    macaco = 12
    return macaco

end

 lalala 

if macaco_2 == 12

puts "ok"

end

O comando "Return" deveria retornar o valor da variável pra fora possibilitando a comparação dela em outras funções, assim como está nos vídeos das aulas. Nada funciona, e mais, o problema não é no meu código, eu coloquei o código do instrutor pra rodar e aconteceu a mesma coisa, mas no video a variável dele retorna. Eu não faço a minima ideia de onde está o problema. já tentei reinstalar o ruby, e está tudo certinho. Não sei mais o que faço.

solução!

Cara como eu te falei o problema é o escopo da variavel, uma variavel que esta em uma funcao só esta viva nela quando você retorna com o return, a funcao retorna o valor do macaco não o macaco mas tente assim :

def lalala

macaco = 12

return macaco

end

if lalala == 12

puts "ok"

end

================================== ou assim

def lalala

macaco = 12

return macaco

end

outroMacaco = lalala

if outroMacaco == 12

puts "ok"

end

Funcionou, mas, dessa maneira eu só posso retornar um valor por função?

E, por que na videoaula o instrutor conseguiu retornar o valor e usar a variavel como parametro em outra função, e com exatamente o mesmo código ocorreu esse erro aqui?

Cara na verdade eu fiz esse curso e não é que ele esta usando a mesma variavel ele declarou uma com o mesmo nome da que esta no metodo recebendo o retorno do método, tem uma das aulas la que fala sobre escopo de variaveis, aconselho a reve-la com calma porque ai tu vai compreender o que eu quero dizer, mas pelo forum não é facil, mas resumindo uma variavel declarada dentro de uma funcao só é viva dentro dela quando chega o end da funcao o ruby libera da memoria ela e ela deixa de existir.