Lua,如何设置默认函数参数值。这不可能错了吧?
2018-8-10 16:21:25
收藏:0
阅读:481
评论:2
Eclipse 告诉我在 '=' 附近期望有 ')',但是这肯定不对吧? 以下是我的代码:
Animator = Class{}
function Animator:init(statictilesize = true)
self.isTileSizeStatic = statictilesize
end
我很困惑。我只学习Lua一个月,我更擅长C++、C#、Python这些语言。或许我漏掉了什么。
点赞
用户88888888
通常情况下,定义函数时将想要可选的变量暂时不设值,稍后再设置,并重新定义函数以查找表的形式:
Animator = Class{}
function Animator:init(args)
self.isTileSizeStatic = args.statictilesize ~= false
end
之后你可以以这种语法形式调用该函数:
Animator.init{statictilesize = false}
在 Lua 中, nil 和 false 都是虚值条件,其他所有条件都是真实值,包括 0 和 ''。因此,为了得到这种功能,即当 statictilesize 未设置时,它默认为真实条件,你必须检查它是否不等于 false,因为其他所有条件都会为真,包括 nil,因为 nil 不等于 false。
请注意,这会将你的参数隐式转换为 bool 类型。
这是 Python 中相当不同的处理方式。
更多详细信息,请参阅以下网址:
https://www.lua.org/pil/5.3.html
此外,如果你想让 false 成为传递给该函数的可接受参数之一(或者你不希望参数被隐式转换为布尔值),可以使用以下语法:
function Animator:init(args)
if args.statictilesize ~= nil then self.isTileSizeStatic = args.statictilesize else self.isTileSizeStatic = true end
end
2018-08-10 16:34:31
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

好的,显然我是一名完全陌生的 Lua 新手,习惯了 C++ 和 Python 的待遇。
Lua 不允许这样做。相反,在初始化或构造函数内部,应该放置:
argument = argument or defaultValue例如,
function Animator:init(statictilesize) statictilesize = statictilesize or true self.isTileSizeStatic = statictilesize -- Yikes end编辑:我找到了一个更稳定的解决方案,因为我在第一个参数之后需要更多的参数。
function Animator:init(booleanstatictilesize, totalanimationstates, totalanimationframes) if booleanstatictilesize ~= false then self.isTileSizeStatic = true else self.isTileSizeStatic = false end end这是一种相当粗略的类型转换/检查方法。我可能会有错,毕竟我对这些还是一位新手。我从未接受过正式的编程教育,可能听起来像个白痴。