2017-09-16 1 views
-1

J'essaie de créer un nouveau hash (groupe) auquel je transmettrai des valeurs pour le nom, l'épicerie, fuel_and_accommodations et leisure_activities. En fait, j'aurai besoin d'un hash imbriqué dans le hash du groupe (pour chaque voyageur). Ma question maintenant est que je reçois ce message:Ruby hash.new erreur variable ou méthode locale non définie ... pour objet principal: Object

variable locale non définie ou méthode `groupe 'pour principal: Object
(rempl): 5:` user_name'
(rempl): 18: en `bloc dans enter_expenses de
(le rempl): 15: en` temps de
(le rempl): 15: dans `enter_expenses de
(le rempl): 34: dans` »

Je suis apprendre Ruby. Toute aide serait grandement appréciée!

group = Hash.new 

def user_name 
    puts "What is the name of this traveler?" 
    group["name"]= gets.chomp.capitalize 
end 

def enter_expenses 
    puts "Welcome to the Expense Tracker System!\n".upcase 
    puts "__________________________________________" 
    puts "\nUse this system to track your group's expenses when traveling." 
    print "Ready to get started? Enter yes to continue" 
    ready_to_expense = gets.chomp.downcase 


    4.times do 

    if ready_to_expense == "yes" 
     puts "Welcome #{user_name}! Enter your expenses below:\n" 

     puts "Amount spent on groceries:" 
     group["groceries"]= gets.chomp.to_f 

     puts "Amount spent on fuel & accommodations:" 
     group["fuel_and_accommodations"]= gets.chomp.to_f 

     puts "Amount spent recreational activities:" 
     group["recreational_activities"] = gets.chomp.to_f 

    elsif "Please come back when ready to enter your expenses." 
    end 
    end 
end 

enter_expenses 
create_travelers 

puts "__________________________________________" 
puts "Thanks for using the expense tracker system!".upcase 

Répondre

0

Les variables locales dans Ruby n'entrent pas dans les méthodes; les méthodes déclarent leur propre portée, elles n'agissent pas comme des fermetures. Vous pouvez utiliser la variable d'instance à la place:

@group = Hash.new # NOTE @ 

... 

def enter_expenses 
... 
    4.times do 
    if ready_to_expense == "yes" 
     @group["groceries"]= gets.chomp.to_f # NOTE @ 
     ... 
    end 
    end 
end 
+0

en fait une variable d'instance ou globale ne fonctionne pas non plus :(Merci beaucoup pour la réponse mudasobwa Toutes les autres suggestions – kax

+0

Bien sûr, il le fait!?. – mudasobwa