如何用Lua区分1和1.0。
2015-9-8 15:24:46
收藏:0
阅读:92
评论:4
我有一个配置脚本,用户可以输入绝对值或百分比值。
绝对值被写作介于0.0和1.0之间的值,而以百分比表示的值被写作0到100。
如何区分1和1.0? 如果我要使用字符串,那肯定不是问题... 我希望保持这个配置简单,不用依赖字符串。
这样可能吗?
回顾:
a = 1
b = 1.0
如何告诉 a 和 b 不是相同的类型。
编辑 配置文件看起来像这样:
local config = {}
-- 有很多评论描述如何配置
config.paramA = 1
config.paramB = 1.0
returen config
在我的处理脚本中,我像这样读取配置:
config = require 'MyConfigFile'
config.paramA
config.paramB
点赞
用户2546626
在Lua 5.3中出现了_整数_数据类型,可以区分整数和浮点数,并在某些情况下提供更好的性能。math.type是获取数字子类型的函数。
local x = 1.0
print(math.type(x)) -- float
x = 1
print(math.type(x)) -- integer
如果您的百分比值也应为浮点数,则William已经称之为:“数字是数字”。您必须向数字添加其他信息以区分它,例如将其打包在带有标识符的表中。由于只有2种情况,布尔值将是一种廉价的解决方案。
2015-09-08 15:09:19
用户1442917
使用 Lua 5.1 和 5.2 没有区别,这可以从 luac 的输出(luac -i)中看出,因为 local a, b = 1, 1.0 会生成以下代码:
main <1.lua:0,0> (3 instructions, 12 bytes at 007D04E8)
0+ params, 2 slots, 0 upvalues, 2 locals, 1 constant, 0 functions
1 [1] LOADK 0 -1 ; 1
2 [1] LOADK 1 -1 ; 1
3 [1] RETURN 0 1
Lua 5.3 允许使用 math.type 区分它们,因为它们有不同的子类型。
作为你特定问题的解决方案,如果你确实想让它变成非整数,你可以给数字添加一个非常小的偏移量:1.0000001 而不是 1.0。
2015-09-08 15:27:12
用户2726734
一些建议:
1)只允许两种格式中的一种。
2)使用函数使格式明确。
config.paramA = percent(1.9)
config.paramB = portion(1)
这些函数可以创建带有类型信息的表格,也可以将值转换为一致的类型。
2015-09-08 15:33:46
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
从PIL可以看出,数字是数字,因此在使用它们时无法区分
1和1.0,因为它们具有相同的类型。解决问题的一种方法是使用包含值和类型的表:
config.paramA = {1, 'i'} config.paramB = {1.0, 'd'}或者使用一个字符串,在转换为整数之前解析它:
config.paramA = '1' config.paramB = '1.0'