在Lua中,如何正确地将nil参数设置为某个默认值?

时间:2015-03-22 00:07:59

标签: function parameters lua

对于下面的Lua代码:

local function foo(x, y, z)
    local x = x or true
    local y = y or 1234
    z = z or "default"
end

我一直认为这三行内容的含义是:

如果x / y / z为nil,则x / y / z设置为true / 1234 /"默认为"。否则,它仍然是它。因此,我在很多地方都有这样的一行来设置一个参数为某个默认值,以防它可能作为nil传递给函数。

然而,在我的实验中似乎并不完全正确。我不知道在哪里学习了这个Lua编码概念。如何正确地做到这一点?

3 个答案:

答案 0 :(得分:3)

只要您的布尔(?)变量x未初始化为false,该方法就会起作用。如果您只想对nil值使用默认值,则a or b方法是正确的。

如果您的变量可以是false,则必须使用严格的if-then块:

if x == nil then x = true end

您可以在lua wiki上看到更多关于三元运算符的方法/示例。

答案 1 :(得分:1)

如果您希望能够将nil作为参数传递,则存在一种更严格的方法(例如,您要区分foo(1,2,nil)foo(1,2)

function foo(...)
  local n,x,y,z = select('#', ...), ...
  if n < 3 then z = default end
  if n < 2 then y = default end
  if n < 1 then x = default end
  -- here x,y or z  can be nil
  ...
end

但是你必须要知道自己在做什么,因为这可能不是你职能用户的预期行为。

答案 2 :(得分:0)

这应该可以正常工作:

src 
   |- .. //other stuff
   |- app
         |-app.component.html
         |-app.component.scss
         |-app.component.ts 
         |-app-routing.module.ts
         |-app.module.ts
         |-blogs
                |-blogs.component.html
                |-blogs.component.scss
                |-blogs.component.ts