我正在尝试创建一个函数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