2015-08-13 4 views
0

У меня есть небольшая программа, в которой пользователь вводит свое имя, 3 символа подходят для обозначения загрузки, а затем выводит их имя в сообщении.Доступ к переменной переменной, внешнему классу без ошибки

Следующая без функции загрузки, работает отлично

class Item 
    puts "Enter name" 

    def name 
    @username = $stdin.gets.chomp 
    end 
end 

item = Item.new 

puts "Thankyou #{item.name}" #=> returns name entered 

После того, как я добавить функцию загрузки, например, такие:

class Item 
    puts "Enter name" 

    def name 
    @username = $stdin.gets.chomp 
    loading 
    end 
    def loading 
    (0..2).each do |x| 
     puts "." 
    end 
    end 
end 

item = Item.new 

puts "Thankyou #{item.name}" #=> returns (0..2) 

Вместо возвращения имени в сообщении ThankYou, он возвращает (0 ..2), как-то вызов функции «загрузки» в функции «имя» испортил ее. Я предполагаю, что лучший способ - получить доступ к переменной «имя пользователя» в функции «имя»? Я слышал, что глобальные переменные плохи, но я не уверен, как их все делать. Итак, что мне делать?

ответ

1

Вы можете вернуть значение @username после loading:

def name 
    @username = $stdin.gets.chomp 
    loading 
    @username 
end 

функции в Ruby, по умолчанию возвращает результат последнего заявления, с name вызовом loading:

def name 
    @username = $stdin.gets.chomp 
    return loading 
end 

def loading 
    return (0..2).each ... 
end 

name возвращает значение он получает от loading, который возвращает значение, которое он получает от each, который является коллекцией, на которую он был вызван - (0..2).

+0

Спасибо, намного проще, чем я думал! –

Смежные вопросы