首页 > 解决方案 > 后备表是 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

我的问题是专门关于 line 的local myTable = getTableOrReturnNil(someArgument) or fallbackTable。据我了解,如果返回 nilfallbackTable的返回值,则该表达式将评估为。getTableOrReturnNil()值得一提的是,我无法控制该功能getTableOrReturnNil()。这是一种常见的做法,还是有一种更标准的方法可以local otherName = myTable["name"]安全地进行,而不必担心是否myTable为 nil。我可以求助于使用 if 链,但如果可能的话,我宁愿避免这种情况。

标签: lualua-table

解决方案


函数中的后备值是,尤其是对于可选参数。也许不是经常整张桌子,但这并非闻所未闻。

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'] )

用词不当

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


推荐阅读