Я не уверен, что для такого рода теста целесообразно использовать программные аргументы (я бы использовал файл со всеми возможными переводами).
Если вы все еще хотите использовать ARGV при вызовеВаша рубиновая программа выглядит так: ruby prog_name.rb ABC:2000 XYZ:3000 transfer:200
ARGV будет выглядеть следующим образом: ["ABC:2000", "XYZ:3000", "transfer:200"]
Итак
- ARGV [0] равно "customer_name1: account_balance1" (используйте split (':') &to_i для получения правильных значений)
- ARGV [1] - это «customer_name2: account_balance2»
- ARGV [2] - это «Transfer :action_amount»
Мое предложение по использованию файла связано с функцией gets
.По сути, вы создадите файл, содержащий следующее:
create_account ABC
create_account XYZ
deposit 2000 ABC
deposit 3000 XYZ
transfer 200 ABC XYZ
С этими данными вы знаете, что делаете и какую функцию будете вызывать, программа, использующая класс Account, будет иметь такую структуру:
require "account" # I'm supposing your $LOAD_PATH is correctly set
while (line = gets)
command, *params = line.split(' ')
case command
when 'create_account'
# Create an account with name = params.first
when 'deposit'
# Deposit params.first.to_i in account with name params[1]
when 'transfer'
# Make sure account with name params[1] has params.first.to_i in its balance
# Withdraw params.first.to_i from account with name params[1]
# Deposit params.first.to_i in account with name params[2]
else
puts "Unknown command #{command} in line #{line}"
end
end
Таким образом, вам нужно будет только позвонить ruby program_name.rb dataset.txt
, и он обработает всю строку dataset.txt.Вы можете создавать различные наборы данных, чтобы убедиться, что ваш аккаунт-менеджер делает правильные вещи.(Так что вам нужно будет сделать методы Transfert и найти метод account в классе AccountManager).