Lua 等价于 null 条件运算符?

问题描述 投票:0回答:1

在lua中,如果我们尝试索引一系列嵌套表(其中任何一个都可以为nil),我们可能会编写如下代码:

-- try to get a.b.c

local ret
if a then
    local b = a.b
    if b then
        ret = b.c
    end
end

我认为这既冗长又丑陋。还有更简单的方法:

-- method 1
local ret = a and a.b and a.b.c

-- method 2
local ret = ((a or {}).b or {}).c

我知道我很吹毛求疵,但这两种方法仍然不完美,方法1导致更多的索引操作(做了两次a.b),方法2创建了一些不必要的表。

所以我想知道是否有一种没有像“?”这样的副作用的方法。在 C# 中?或者 '?。'运算符违反了lua的设计理念吗?

lua lua-table
1个回答
0
投票

只要写一个函数:

local function nestedIndexOrNil(t, ...)
  for _, k in ipairs{...} do
    if not t then
      return nil
    end
    t = t[k]
  end
  return t
end

nestedIndexOrNil(a, 'b', 'c')
© www.soinside.com 2019 - 2024. All rights reserved.