回退表在 lua 中是常见的做法吗?
Are fallback tables a common practice in 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()
return 中的 return 值为 nil,则此表达式的计算结果为 fallbackTable
。可能值得一提的是,我无法控制函数 getTableOrReturnNil()
。这是一种常见的做法还是有更标准的方法来安全地执行 local otherName = myTable["name"]
而不必担心 myTable
是否为零。我可以求助于使用 if 链,但如果可能的话我宁愿避免这种情况。
函数中的后备值是,尤其是对于可选参数。可能不像 entire tables 那样经常,但这并非闻所未闻。
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'] )
nomer misnomer
我需要编写一些 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()
return 中的 return 值为 nil,则此表达式的计算结果为 fallbackTable
。可能值得一提的是,我无法控制函数 getTableOrReturnNil()
。这是一种常见的做法还是有更标准的方法来安全地执行 local otherName = myTable["name"]
而不必担心 myTable
是否为零。我可以求助于使用 if 链,但如果可能的话我宁愿避免这种情况。
函数中的后备值是,尤其是对于可选参数。可能不像 entire tables 那样经常,但这并非闻所未闻。
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'] )
nomer misnomer