Как я могу заставить эту простую банковскую систему поддерживать обновленный баланс?

#ruby #console

#ruby #консоль

Вопрос:

 def account()
    puts "ENTER ACCOUNT NUMBER"
    accountnumber = gets.chomp
    puts "SUCCESS"
    modeselect()
end

def modeselect()
    puts "WHAT WOULD YOU LIKE TO DO?"
    mode = gets.chomp
    mode.upcase!
    case mode
        when "DEPOSIT"
        deposit()
        else
        account()
    end
end

def deposit()
    balance = 0
    puts "ENTER DEPOSIT AMOUNT"
    depositamount = gets.chomp.to_i
    balance == balance   depositamount
    puts "DEPOSIT SUCCESSFUL, BALANCE = #{balance}"
    modeselect()
end


account()
  

В настоящее время код завершает депозит, однако, когда метод депозита запускается снова, баланс сбрасывается, я пытаюсь сделать так, чтобы он соответствовал последнему запуску, поэтому баланс постоянно обновляется после каждого депозита.

Как я могу это сделать? Спасибо.

Комментарии:

1. Используйте переменную экземпляра, @balance .

2. что balance == balance depositamount делает в вашем коде?

3. Я думаю, вам нужно еще немного ознакомиться с основами. Это идеальный вариант для класса, но мне не ясно, знаете ли вы, как его использовать.

Ответ №1:

Есть три причины, по которым баланс выглядит так, как будто он сбрасывается.

Во-первых, баланс хранится в переменной, область видимости которой содержится в блоке функций депозита. Это означает, что какое бы значение эта переменная ни имела по завершении функции, оно не будет сохранено. Фактически переменная больше не доступна. Вы можете использовать переменную экземпляра, как предложил Sergio, используя @balance

Во-вторых. Баланс явно устанавливается в 0 сразу после ввода функционального блока депозита. Вариант исправления — присваивать @balance значение 0 только в том случае, если ему еще не было присвоено значение. Вы можете сделать это с помощью @balance ||= 0

В-третьих. Оператор в четвертой строке функционального блока депозита == является оператором сравнения, а не оператором присваивания. Я полагаю, что вы намерены использовать = .

 def account()
    puts "ENTER ACCOUNT NUMBER"
    accountnumber = gets.chomp
    puts "SUCCESS"
    modeselect()
end

def modeselect()
    puts "WHAT WOULD YOU LIKE TO DO?"
    mode = gets.chomp
    mode.upcase!
    case mode
        when "DEPOSIT"
        deposit()
        else
        account()
    end
end

def deposit()
    @balance ||= 0
    puts "ENTER DEPOSIT AMOUNT"
    depositamount = gets.chomp.to_i
    @balance = @balance   depositamount
    puts "DEPOSIT SUCCESSFUL, BALANCE = #{@balance}"
    modeselect()
end

account()
  

Ответ №2:

Если вы не хотите использовать переменную экземпляра, такую как @balance , вам может потребоваться передать переменную balance при вызове ваших методов / функций для «сохранения» значения. Что-то вроде этого (обратите внимание, что этот код работает, но имеет серьезные недостатки)

 def account()
    balance ||= 0
    puts "ENTER ACCOUNT NUMBER"
    accountnumber = gets.chomp
    puts "SUCCESS"
    modeselect(balance)
end

def modeselect(balance)
    puts "WHAT WOULD YOU LIKE TO DO?"
    mode = gets.chomp
    mode.upcase!
    case mode
        when "DEPOSIT"
        #balance ||= 0
        deposit(balance)
        else
        account()
    end
end

def deposit(balance)        
    puts "ENTER DEPOSIT AMOUNT"
    depositamount = gets.chomp.to_i
    balance = balance   depositamount
    puts "DEPOSIT SUCCESSFUL, BALANCE = #{balance}"
    modeselect(balance)
end


account()