2016-05-18 24 views
0

Ich lehre mich selbst Ruby, also bitte, ertragen Sie mit mir. Wenn ich ein Objekt mit mehreren definierenden Attributen erzeuge und dieses Objekt in ein Array verschiebe, wie kann ich auf eines dieser Attribute in einer anderen Methode zugreifen, um es in einem Kontrollflussschema zu verwenden? Ich mache ein Banking-ATM-Programm zum Spaß. Mein Code ist unter ...Zugriff auf die Instanzvariable eines Objekts von einem Array aus

class Bank 


    class AccountMaker 
     attr_accessor :account_number, :name, :balance, :pin 

     def initialize(account_number, name, balance, pin) 
      @account_number = account_number 
      @name = name 
      @balance = balance 
      @pin = pin 
     end 
    end 

    def initialize 
     @accounts = [] 
    end 

    def add_account(account_number, name, balance, pin) 
     account = AccountMaker.new(account_number, name, balance, pin) 
     @accounts << account 
    end 

    def login_screen(accounts) 

     def account_number_login(accounts) 
      puts "Please enter your 7 digit account number." 
      account_number_input = gets.chomp 
      puts accounts.instance_variable_get(:account_number) 

      if (/^\d{7}$/ === account_number_input) and (account_number_input === (what should go here)) 
       thank_you_msg() 
       pin_login(account_number_input) 
      else 
       error_msg() 
       account_number_login() 
      end 
     end 

Ich habe mehr Code danach, aber es ist nicht relevant für die Frage. Im Wesentlichen möchte ich aus dem Konto array: account_number extrahieren und es in der if-Anweisung innerhalb der Login_screen-Funktion verwenden, um festzustellen, ob das Konto tatsächlich existiert. Jede und jede Hilfe würde geschätzt werden.

Antwort

2

accounts ist ein Array. Sie müssen also auf eine der Instanzvariablen account_number des Elements zugreifen. Zum Beispiel ist das erste Element:

# accounts[0] would return an instance of `AccountMaker ` 
accounts[0].instance_variable_get(:account_number) 

Auch brauchen Sie nicht instance_variable_get zu verwenden, da Sie es bereits als Accessor erklärt. So können Sie einfach account_number Methode darauf aufrufen.

accounts[0].account_number 
+0

Ehrfürchtig danke. Was nun, wenn ich es mit Objekten vergleichen wollte? Angenommen, ich habe mehrere verschiedene Objekte mit unterschiedlichen Kontonummern und ich wollte das eine Objektkonto, das mit der Kontonummer übereinstimmt, die der Benutzer eingibt? – JCD

+1

Sie würden wahrscheinlich stattdessen ['Hash'] (http://ruby-doc.org/core/Hash.html) verwenden. Die Kontonummer wäre ein Schlüssel und das tatsächliche Konto der Wert. – Uzbekjon

+0

Das denke ich auch. Ich ging weiter machte es zu einem Hash, so die gleiche Frage wie zuvor nur, wie kann ich auf den Hash innerhalb des Arrays, insbesondere die: account_number Wert? – JCD

Verwandte Themen