正如摘要所述。假设我想以三元运算符的方式解析ReturnFunction 。好吧,据我所知,只要我的函数返回几个值(ReturnThreeValues)被放置在ReturnFunction返回后的最后一个位置,如果三元运算符执行我认为的操作,则ReturnFunction应该返回它给出的三个值这里是预期的,但由于某种原因,即使 n == nil ,它也会不断返回ReturnOneValue的值(因为我在调用时没有包含它)。可以在这里看到并尝试:
<script src="//github.com/fengari-lua/fengari-web/releases/download/v0.1.4/fengari-web.js"></script>
<script type="application/lua">
function ReturnOneValue(t, n)
n = n or 1
return t[n]
end
function ReturnThreeValues(t)
return t[1], t[2], t[3]
end
function ReturnFunction(t, n)
return n ~= nil and ReturnOneValue(t, n) or ReturnThreeValues(t)
end
local t = {"One", "Two", "Three"}
local r1, r2, r3 = ReturnFunction(t)
print(r1, r2, r3)
</script>Run Code Online (Sandbox Code Playgroud)
好吧,基本上我不明白为什么我的打印结果是:“一零零”而不是:“一二三”,因为它应该是,如果三元运算符按(我认为是)预期的方式工作......或者在以这种三元方式解决多重返回函数时,我是否没有考虑到什么?
编辑:
FTR(以防万一对任何人都有用),在做了更多研究后,我找到了另一个问题以及可能的解决方法,结果证明它有效,如下所示:
<script src="//github.com/fengari-lua/fengari-web/releases/download/v0.1.4/fengari-web.js"></script>
<script type="application/lua">
function ReturnOneValue(t, …Run Code Online (Sandbox Code Playgroud)好的,根据PiL 2.1 \xe2\x80\x93 词法约定,它应该是可能的,因为它没有被列为保留关键字,但它确实用于返回像这种类型(“whatever”)和VS这样的元素类型代码有时会给它着色,有时不依赖于上下文...另外,如果我这样做,它似乎在ZeroBrane Studiolocal type = "123" print(type)中毫无问题地打印“123” ,但在我编写的托管程序中(都同样运行 Lua 5.2),由于某种原因,它在打印后抛出以下错误:“尝试调用 upvalue \'type\'(字符串值)”。
那么我的困惑是,使用它是否安全,因为它没有被列为保留关键字?如果没有,为什么没有列出来?我一直试图避免它,而倾向于使用“kind”,以防万一,但现在我想确定这里发生了什么(如果有的话),我希望这是有道理的......谢谢。
\n