[英]When specifying command-line arguments Ruby no longer waits for input using gets
[英]Input using command line arguments
定義一個具有三個三個屬性“name”、“account_no”和“balance”的類 Account。 Name 和 Balance 在創建 Account 類的對象時需要設置,account_number 應該是自動遞增的。 這個 Account 類必須有兩個方法,deposit() 和withdraw()。
您的程序應該采用三個參數 1. 客戶一 2. 客戶二 3. 交易金額
輸入格式:customer_name1:account_balance1 customer_name2:account_balance2 transfer:transaction_amount
我正在嘗試使用 ARGV 獲取輸入,但不確定如何以格式獲取輸入 -- ABC:2000 XYZ:3000 transfer:200
有什么建議 ?
我不確定將程序參數用於這種測試是否是個好主意(我將使用包含所有可能轉換的文件)。
如果您在調用 ruby 程序時仍想使用 ARGV: ruby prog_name.rb ABC:2000 XYZ:3000 transfer:200
ARGV 將如下所示: ["ABC:2000", "XYZ:3000", "transfer:200"]
所以
我對文件使用的建議涉及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 的所有行。 您可以創建各種數據集以確保您的客戶經理做正確的事情。 (因此,您需要在 AccountManager 類中創建 transfert 方法並找到帳戶方法)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.