placeholder = f()
if placeholder then return placeholder end
这种感觉不够优雅,在两行中完成这么简单的任务,这么多单词感觉很奇怪。有没有更简洁/更好的"写这个的方式?
这个有用的例子是:
for f in pairs(listOfFunctions) do
placeholder = f()
if placeholder then return f() end
end
答案 0 :(得分:0)
背景:
or
是一个选择器运算符:它返回第一个非“falsey”操作数。 (除非需要,否则不评估这些第二个操作数表达式。)目前还不清楚您想要返回哪些返回列表以及在哪些条件下返回。如果f()返回的列表的第一个值既不是nil
也不是false
,那么您显示的内容似乎是,返回一个值;否则返回一个空列表。
但有时候如果你返回带有多余值的列表并不重要,特别是只有nil
而不是空列表的列表。其他时候,每次返回相同数量的值非常有用。
所以,这里有一些替代方案。
返回f()的result-list
中的所有值return f()
或者,只返回f()的结果列表中的第一个值,如果没有则返回nil
return (f())
或者,如果它不是nil
也不是false
,则返回f()的结果列表中的第一个值,否则返回nil
return f() or nil
或者,如果它不是nil
也不是false
,则返回f()的结果列表中的第一个值,否则返回false
return f() or false
如果您发现代码中的那个点无条件返回很麻烦,那么您需要重新构建控制流 - 事实上,无论如何都可能从较少的控制流中受益。