2016-05-18 4 views
0

Преподавание себя Руби, поэтому, пожалуйста, несите меня. Если я создаю объект с несколькими определяющими атрибутами и вставляю этот объект в массив, как мне получить доступ к одному из этих атрибутов в другом методе, чтобы использовать его в схеме потока управления? Я делаю программу банкоматов для развлечения. Мой код ниже ...Доступ к переменной экземпляра объекта из массива

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 

У меня есть код после этого, но это не относится к вопросу. По сути, я хочу извлечь из массива учетных записей: account_number и использовать его в инструкции if в функции Login_screen, чтобы увидеть, действительно ли учетная запись существует. Любая помощь будет оценена по достоинству.

ответ

2

accounts - это массив. Таким образом, вам нужно получить доступ к одной из своих переменных «account_number». Например, первый элемента:

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

Кроме того, вам не нужно использовать instance_variable_get, так как вы уже объявили его в качестве аксессору. Итак, вы можете просто вызвать метод account_number.

accounts[0].account_number 
+0

Удивительная благодарность. Теперь, что, если я хотел бы сопоставить его с объектами? Скажем, у меня есть несколько разных объектов с разными номерами учетных записей, и мне нужна учетная запись одного объекта, соответствующая номеру учетной записи пользователя. – JCD

+1

Возможно, вы захотите использовать ['Hash'] (http://ruby-doc.org/core/Hash.html). Номер учетной записи будет ключевым и фактическим значением учетной записи. – Uzbekjon

+0

Я тоже так думаю. Я пошел вперед, сделав хэш, так же, как и раньше, только как получить доступ к хешу внутри массива, в частности: значение account_number? – JCD

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