在Lua脚本中有奇怪的逻辑?
2011-2-15 16:4:46
收藏:0
阅读:151
评论:4
我似乎不能理解Lua计算布尔值的方式。
这是一个用于演示问题的微不足道的片段:
function foo()
return true
end
function gentest()
return 41
end
function print_hello()
print ('Hello')
end
idx = 0
while (idx < 10) do
if foo() then
if (not gentest() == 42) then
print_hello()
end
end
idx = idx +1
end
当运行该脚本时,我期望在控制台上看到“Hello”打印出来,但实际上没有任何东西被打印出来。有人可以解释一下吗?
原文链接 https://stackoverflow.com/questions/5006085
点赞
stackoverflow用户107090
尝试not (gentest() == 42)
。
2011-02-15 16:10:21
stackoverflow用户604734
在 while 循环中,应该在括号外使用 not
:
while (idx < 10) do
if foo() then
if not (gentest() == 42) then
print_hello()
end
end
idx = idx + 1
end
(gentest() == 42)
返回 false,然后 not false
返回 true。
(not gentest() == 42)
与 ( (not gentest()) == 42)
相同。因为 not gentest()
返回 not 41
== false
,所以你将得到 false == 42
,最终返回 false
。
2011-02-15 16:10:36
stackoverflow用户571539
在您的示例上下文中,“not” 不会被视为布尔运算符,而是被视为反转运算符。例如布尔运算符,当没有算术运算符时,“if a” 表示当条件、状态、事件或开关“a” 的测试满足时结果为真,“if not a” 表示当条件、状态、事件或开关“a” 不满足时结果为真。当一个条件语句有一个算术运算符和第二个值时,“not” 会略有不同,测试针对一个特定的变量或字面值作为一个值,例如 “if a not = 42”,因为它是一个条件运算符而不是布尔运算符,真值表可能有不同的条目。
2011-02-20 17:07:25
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我没有尝试过这个,但我认为
not
比==
有更高的优先级,导致以下结果:if ((not 41) == 42) then
...很明显,not 操作符的结果(true 或 false)与 42 不相等。