如何在保持编码规范的同时避免重复编写代码?
我正在尝试创建一个名为 getInput(prompt, number) 的函数,其中 prompt 是将打印在用户输入前面的文本(例如 > 或 选择密码:),而 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 循环。
即使 number 是 true,我也在每一轮 while 循环中执行 if number 检查。
我应该使用第一个代码,还是有一种改进第二个代码更加“正式”的方法?
```lua
local function getInput(prompt, number)
io.write(prompt)
local input = (number and tonumber or assert)((assert(io.read(), 'EOF')))
return (input and function() return input end or getInput)(prompt, number)
end
```lua
local function getInput(prompt, number)
io.write(prompt)
local input = (number and tonumber or assert)((assert(io.read(), 'EOF')))
return (input and function() return input end or getInput)(prompt, number)
end
我觉得第一种表达方式相当清晰易读。即使你写了相似的语句两次,其中没有太大的问题。
我唯一的建议是将其拆分成两个函数,不要使用布尔标志(即,getInput(prompt)和getNumericInput(prompt)),或者将布尔转换为类型并将捕获适当类型的逻辑移动到单独的方法:
`` ` 函数getInput(提示,类型) io.write(prompt) input = getTypedInput(type) 返回输入 结尾
function getTypedInput(type) input(io.read()) …更改类型(我不知道Lua语法) 返回输入 结尾
`` `
后者对于您的问题可能有点过度设计,除非您认为有可能使用比数字或非数字更多的类型。
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
通常情况下,重复一个非常简单的单行代码,类似于
io.write(prompt)并不被认为是“代码重复”。此外,反复检查相同的简单条件通常不会被视为性能隐患。两种方式都同样易读,所以可以根据个人喜好选择一种。一种可能的改进方式是将函数拆分为两个,并删除
number标志,如下所示:function getInput(prompt) io.write(prompt) return io.read() end function getNumericInput(prompt) while not input do io.write(prompt) input = tonumber(io.read()) end return input end然而,在运行时决定输入类型并且必须通过变量进行控制的情况下,这种方式可能不可接受。