Lua 逻辑运算符与其他语言不同?
所以我开始尝试使用 Lua 的逻辑运算符 and、 or 和 not。
在这里 https://www.lua.org/pil/3.3.html 中说明了 print(4 and 5) 将返回 5,而 print(4 or 5) 将返回 4。
如果你把数字换成 print(5 and 4),它将返回 4。
我理解 and 运算符返回第一个操作数,如果它为 false,则返回第二个操作数,但我从像 C++ 这样的语言中习惯 print (4 and 5) 返回 4 的结果。如何在 Lua 中获得与 C++ 或类似语言相同的结果?
and/or 运算符的返回值如下:
or
从左到右按照运算符优先级计算出的第一个真值。这就是为什么执行 print(4 or 5) 时会得到 4。
and
在链式的 and 操作中遇到的最后一个真值。因此,执行 print(5 and 4) 时会得到 4。
这些规则是你可以通过链式的 and/or 操作来模拟三元运算符的原因,例如:
condition and expression or expression
-- 等价于 C/C++ 语言中的 (condition) ? expression : expression
如果你把 and 与 C/C++ 语言中的 & 混淆起来了,那么你应该使用 位运算符。
&:按位与
|:按位或
~:按位异或
>>:右移
<<:左移
~:按位取反
对于 Lua 5.2:
print(bit32.band(4, 5))
会输出 4。
你混淆了在 C/C++ 中 & 运算符的作用。它是一种按位与运算,也就是说它查看数字的二进制表示。
本质上,& 运算符会查看两个数中的每个二进制位,如果都为 1 时就保留 1,如果任意一个是 0 就保留 0。在实践中:
0 1 0 0 // 4 的二进制表示
& 0 1 0 1 // 5 的二进制表示
------------
0 1 0 0 // 同样是 4 的二进制表示
Lua 中的 and 函数则完全不同。你说了你理解它的作用,所以我就不再解释了,但是类 C 语言中的 & 运算符的作用却完全不同。它只处理数字,且由于这些语言的静态类型,使用 and 关键字只会返回一个布尔值,而不是像 Lua 一样的特定值。
希望这可以帮到你。如果你碰巧想要做类似于让变量根据简单的测试来赋值的操作,比如如果大于一个特定数则为该值,否则为默认值,你可以这样做(在 Lua 中):
local a = 4
local var = (a > 5) and a or 5
这样,你就可以在不使用完整的 if/else 语句的情况下设置 a 可以达到的最小值。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

这段 C 代码确实会打印
4printf("%d\n", 4 & 5);但这是
4的二进制表示造成的意外。事实上,接下来的代码将打印
4,而不是5或6:printf("%d\n", 5 & 6);如果你使用逻辑 _and_,那么这段代码会打印
1,而不是4或5。printf("%d\n", 4 && 5);