#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()