你为什么要在布尔表达式的末尾添加“或 false”?
2011-7-15 13:16:18
收藏:0
阅读:114
评论:4
我看过类似于lua中的这样的代码:
if (a==b or false) then
"or false"的目的是什么?
这是原始代码:
Function = function(self, aura, auraID)
-- 存储版本号。
-- aura.Version = 50000;
-- 修复texmode/glow。
aura.texmode = (aura.texmode == 1 or aura.texmode == true or false);
-- 纹理源。
if(aura.owntex or aura.SourceType == PowaAuras.SourceTypes.Icon) then
aura.SourceType = PowaAuras.SourceTypes.Icon;
elseif(aura.wowtex or aura.SourceType == PowaAuras.SourceTypes.WoW) then
aura.SourceType = PowaAuras.SourceTypes.WoW;
elseif(aura.customtex or aura.SourceType == PowaAuras.SourceTypes.Custom) then
aura.SourceType = PowaAuras.SourceTypes.Custom;
elseif(aura.textaura or aura.SourceType == PowaAuras.SourceTypes.Text) then
aura.SourceType = PowaAuras.SourceTypes.Text;
else
aura.SourceType = PowaAuras.SourceTypes.Default;
end
end
这是另一个例子:
-- 遍历元素子项。
visible, hidden = self:UpdateScrollList(key, level+1, visible, hidden,
(parentShowing == true and item:GetExpanded() or false));
原文链接 https://stackoverflow.com/questions/6705576
点赞
stackoverflow用户689543
它被用于临时禁用一块代码。
它的语义技术上与以下代码相同:
#if 0
此处放置死代码...
#endif
2011-07-15 10:51:29
stackoverflow用户596285
这似乎是一种语法行为:
a=b or false
它会将 a
初始化为 b
的值,如果 b
未定义,则为 false
。
就你写的 if
语句而言,我看不到任何目的, 因为 ==
在 or
之前执行。如果他们使用括号更改运算符的顺序,那么它可以用来验证 b
是否已定义,例如:
> a=nil
> b=nil
> if (a == (b or false)) then print("yikes") else print("aok") end
aok
> if (a == b or false) then print("yikes") else print("aok") end
yikes
2011-07-15 12:26:19
stackoverflow用户34799
在没有前置条件成立时,明确声明赋给表达式的值。
在 Lua 中,and
和 or
表达式返回确定其真值的值,而不是简单的真值本身,如下所示:
function And(A,B)
if A then return B --如果 A 是真的,则两者的一致性取决于 B
else return A end --否则,它们不是,因为 A 不是真的
end
function Or(a,b)
if A then return A --如果 A 是真的,则无论 B 是否为真都无所谓
else return B end --否则,真相取决于 B 的值
end
在 Lua 中,除了 false
和 nil
之外的所有值在条件结构中都会被评估为 true
,因此这种行为通常被用作默认值的习语:
local color = color or 'blue' --如果 `color` 被定义为任何值,而不是
--`false`(如任何字符串),它将被评估为 true,
--并且该值将从 `or` 语句中返回(因此 `color` 将被赋
--值为其自身的值,不会产生任何变化)-
--如果 `color` 未定义,`or` 语句
--将评估其 `nil` 值为 false 并
--返回第二个值 'blue'
这种习语可以通过各种方式组合和扩展:
local color = color or self.color
or (favorites and favorites.color)
or (type(favourites)=='table' and favourites.colour)
or get_defaults('color')
or {'red','blue','green','yellow'}[math.random(1,4)]
然而,传统上它们保持相当简单,可能会有一些链式的 or
情况,然后才是默认值。
这就是我们在这里看到的:or false
被用于表达式的最后一个值。
因此,虽然这个:
aura.texmode = (aura.texmode == 1 or aura.texmode == true or false);
可以写成这样,效果完全相同(因为 ==
比较将返回 true
或 false
):
aura.texmode = (aura.texmode == 1 or aura.texmode == true);
添加最后一个 or false
使得在查看该行时更容易看出该值可以是 false。
对于第二个例子,分配给一个参数的值也是如此。
2011-07-15 14:27:04
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
没有用处,因为如果 `a~=b` 那么它会尝试 false,但 false 实际上也是 false,并且无论如何都会返回 false ...