lua 中是否常用后备表?

我需要编写一些 Lua 代码,但是作为一名 C 背景的开发者,一些常见的实践和编程策略对我来说似乎不太寻常。尽管如此,我编写了一些说明我的问题的代码:

local someFunction(myName)
  local fallbackTable = {name = ""}

  local myTable = getTableOrReturnNil(someArgument) or fallbackTable
  local otherName = myTable["name"]
  --other code that is irrelevant
end

我的问题具体是关于 local myTable = getTableOrReturnNil(someArgument) or fallbackTable 这行代码。据我所知,如果 getTableOrReturnNil() 的返回值为 nil,该表达式将求值为 fallbackTable。值得一提的是,我无法控制函数 getTableOrReturnNil()。这是一种常见的做法,还是有一种更标准的方法可以安全地进行 local otherName = myTable["name"] 而不必担心 myTable 是否为 nil。我可以使用一系列 if 条件语句,但如果可能的话,我更愿意避免这样做。

点赞
用户3342050
用户3342050

在函数中,特别是对于可选参数,回退值非常重要。可能不会经常使用完整的表,但这并不罕见。

local function clamp( value, minimum, maximum )
    minimum = minimum or 0
    maximum = maximum or 255
    return math.min( math.max( value, minimum ), maximum )
end

print(  clamp( -50 ),  clamp( 50 ),  clamp( 500 )  )

0 50 255



对于表,当一个值不存在时,更容易看到元表的使用。

mytable  = { name = 'nomer' }
meta  = {  __index  = function( tbl, key ) return 'misnomer' end  }

setmetatable( mytable, meta )
print( mytable['name'],  mytable['noname'] )

nomer misnomer

https://www.tutorialspoint.com/lua/lua_metatables.htm

2021-06-12 03:10:29