【问题标题】:Are fallback tables a common practice in lua?后备表是 lua 中的常见做法吗?
【发布时间】:2021-08-28 20:40:45
【问题描述】:

我需要编写一些 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 是否为零。我可以求助于使用 if 链,但如果可能的话,我宁愿避免这种情况。

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    函数中的后备值是,尤其是对于可选参数。也许不像经常整个表,但它并非闻所未闻。

    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



    对于表格,您更有可能看到metatables 在值不存在时使用。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多