在使用结果之前检查函数的返回值

时间:2016-11-18 00:16:30

标签: function lua

    placeholder = f()
    if placeholder then return placeholder end

这种感觉不够优雅,在两行中完成这么简单的任务,这么多单词感觉很奇怪。有没有更简洁/更好的"写这个的方式?

这个有用的例子是:

    for f in pairs(listOfFunctions) do
        placeholder  = f()
        if placeholder then return f() end
    end

1 个答案:

答案 0 :(得分:0)

背景:

  • 函数可以包含任意数量的返回语句,这些语句返回任意数量的值,并且可以随着调用而变化。
  • or是一个选择器运算符:它返回第一个非“falsey”操作数。 (除非需要,否则不评估这些第二个操作数表达式。)
  • 产生列表的表达式保留列表上下文中的整个列表(例如,列表中的最后一个表达式,例如return语句),但只保留非列表上下文中的第一个值(例如,inside括号中)。

目前还不清楚您想要返回哪些返回列表以及在哪些条件下返回。如果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

如果您发现代码中的那个点无条件返回很麻烦,那么您需要重新构建控制流 - 事实上,无论如何都可能从较少的控制流中受益。