print(one) uno > -6ren">
gpt4 book ai didi

Lua - 设置多个变量的默认值

转载 作者:行者123 更新时间:2023-12-02 09:26:07 26 4
gpt4 key购买 nike

Lua中是否可以为多个变量设置默认值?我似乎很难做到这一点。

我的逻辑:1)可以为多个变量设置值,如下所示:

> one, two = "uno", "dos"
> print(one)
uno
> print(two)
dos

2)可以为变量设置默认值,如下所示:

> foo = string.match("/dir/example.txt", "dir/(..)/.*") or "ab"
> return print(foo)
ab

3)当我尝试为多个变量设置默认值时,遇到了问题:

> foo, bar = string.match("/dir/xx/xx/example.txt", "/dir/(..)/(..)/.*") 
> print(foo)
xx
> print(bar)
zz

> foo, bar = string.match("/dir/xx/xx/example.txt", "/dir/(..)/(..)/.*") or "ab","cd"
> print(foo)
xx
> print(bar)
cd

我怀疑正在发生的事情是,它将最后一个逗号之前的所有内容视为“foo”的值,并将其之后的所有内容视为“bar”的值。

使用此示例,是否可以表明如果 string.match 未提供值,则这些值应为默认值?

最佳答案

在解决您面临的问题之前,让我们先解释一下情况 1 和 2 中发生的情况

  1. 您正在将多个值设置为多个值。这是Lua提供的语法糖,每个变量都用逗号分隔,每个值也是如此

  2. 您正在设置“默认”值。您实际上并没有在这里提供默认值,只是使用逻辑运算来执行具有相同输出的任务。当您使用 or 命令时,您会传递 2 个操作数、要设置的值以及默认值(如果第一个操作数不存在)。其工作的唯一原因是or如果第一个参数为 nil 或 false,则返回第二个参数。

现在我们已经有了解释,让我们开始讨论问题本身。

a, b = str:match(pattern) or "y", "z"

Lua 并不像你想象的那样读取它。 Lua 看到这个逗号并且本质上认为

a = str:match(pattern) or "y"
b = "z"

因为我们就是这么说的。我们按照 #1 中的说明分离了值,Lua 无法识别您想要分配匹配返回的内容或这 2 个值。

至于修复它......那么你有两个选择。您可以定期分配它:

a,b = str:match(pattern)
if not (a and b) then
a,b = "y","z"
end

或者您可以使用表格

t = {str:match(pattern)}
a,b = t[1] or "y", t[2] or "z"

这完全取决于你

如果我误解了您的问题,我深表歉意,如果我这样做了,请在评论中通知我

关于Lua - 设置多个变量的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com