我正在嘗試創建一個函數getInput(prompt, number)
,其中prompt
是將在用戶輸入前面打印的文本(例如>
或Choose a password:
),而number
是一個布爾值,用於指示輸入是數字還是任何類型。避免編寫代碼兩次,同時保持正確的代碼方式?
這是我寫的函數:
function getInput(prompt, number)
if number then
while not input do
io.write(prompt)
input = tonumber(io.read())
end
else
io.write(prompt)
input = io.read()
end
return input
end
不過,我重複的代碼相當很多。 我有io.write(prompt)
寫了兩次,我也有input = io.read()
兩次與tonumber()
圍繞其中一個電話。 我基本上只是重複相同的事情兩次,一次在while
循環,一次不在。
這裏有一個小的解決方法我做:
function getInput(prompt, number)
while not input do
io.write(prompt)
input = io.read()
if number then
input = tonumber(input)
end
end
return input
end
這個版本只有io.write()
和io.read()
寫一次,但它不是「正確」的代碼。 即使不需要(當number
爲false時),我仍在使用while
循環。 我也在做if number
檢查while
循環的每一輪(當number
爲真)。
我應該去第一個代碼,還是有一種方法來改善第二個代碼,使其更「適當」?
第二個版本在到達EOF時會永遠循環。 – lhf 2013-05-10 16:16:01
'input'是全球性的,它的值保留了以前的呼叫,所以這兩個函數都不會要求用戶在第二次呼叫時輸入數據。 – 2013-05-10 16:22:15
還要考慮'read(「* n」)'來讀取一個數字。那麼你的代碼路徑就不一樣了。 – daurnimator 2013-05-10 17:00:09