lua - 后备表是 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 链,但如果可能的话,我宁愿避免这种情况。
解决方案
函数中的后备值是,尤其是对于可选参数。也许不是经常整张桌子,但这并非闻所未闻。
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'] )
用词不当
推荐阅读
- laravel - 如何唯一地显示属性类型的属性和值?
- typescript - TypeScript 在重建时创建嵌套的构建文件夹
- qt - 在 QTreeView 中找不到鼠标悬停事件的事件或信号名称
- rotation - 沿带有四元数的球体表面的运动方向性
- selenium - 硒单击并等待
- list - Google Cloud Storage JSON REST API - 在存储桶的子目录中插入和列出对象
- node.js - Node JS:通过 node js 脚本将 .scss 文件编译为 .css 和 .map.css
- java - 如何更改默认的 JFrame 窗口颜色?
- reactjs - Typescript and React - Intellisense 发现将接口作为道具传递的问题
- kotlin - 如何在 buildSrc 模块中导入 KotlinMultiplatformExtension?