匿名
未登录
讨论
暗色模式
贡献
创建账号
登录
滚动的天空Wiki
搜索
编辑“
Help:Lua
”(章节)
来自滚动的天空Wiki
命名空间
帮助
讨论
更多
更多
语言
变体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
页面操作
阅读
编辑源代码
历史
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
==== function ==== Lua中的'''函数(function)'''是'''闭包''',这意味着它们维护对它们声明的作用域的引用,并可以访问和操作该作用域中的变量。 定义一个函数的基本语法是: <syntaxhighlight lang=lua> function 函数名称(参数列表) 语句…… end </syntaxhighlight> 函数名称可以是表的字段,例如t.abc。或者,你也可在function前面加上{{code|local|lang=lua}}关键字,表示该函数是个局部变量。参数是可选的,且视为局部变量。定义函数时,可以使用{{code|...|lang=lua}}表示不定数量的参数(参见[[Help:Lua/基本#select|select]])。 函数内可以使用return语句,表示函数返回一个值,return语句后面应当紧跟代码块的结束。如果没有执行return语句,函数不会返回值,可以认为返回了nil。 匿名函数的表示方法为: <syntaxhighlight lang=lua> function (参数列表) 语句…… end </syntaxhighlight> 匿名函数与普通的函数无区别,例如,下面两个语句的效果是一样的: * {{code|code=local function f(x) return x+1 end|lang=lua}} * {{code|code=local f = function (x) return x+1 end|lang=lua}} 注意:通过匿名函数赋值的方式定义的函数,如果需要在函数内调用函数自身,应当先声明再赋值。例如: * 正确:{{code|code=local function f(x) return x < 5 and f(x + 1) or x end|lang=lua}} * 错误:{{code|code=local f = function (x) return x < 5 and f(x + 1) or x end|lang=lua}}(这里的f(x+1)中的f视为全局变量) * 正确:{{code|code=local f; f = function (x) return x < 5 and f(x + 1) or x end|lang=lua}} 事实上,在Lua中,{{code|local function f(...)|lang=lua}}是一个语法糖,在字节码中,实际上是先声明局部变量再赋值的。 调用函数的语法为: <syntaxhighlight lang=lua> 函数名称(参数列表) </syntaxhighlight> 函数的调用可以单独作为语句,也可以作为表达式。此外,如果调用函数时(无论作为语句还是表达式),只有一个参数,且该参数为字符串或表的字面量,则括号可以省略,例如: * {{code|print "abc"|lang=lua}}等价于{{code|print("abc")|lang=lua}}。 * {{code|print{1, 2, 3}|lang=lua}}等价于{{code|print({1, 2, 3})|lang=lua}}。 Lua的函数不支持方法重载或多重派发,也不能够直接给参数设置默认值。调用函数时,缺失的参数视为nil<ref>如果函数有不定数量的参数,则这些参数的数量是准确的;此外一些Lua内置函数也不会补充参数,例如{{code|tostring()|lang=lua}}会抛出错误,而不是理解为{{code|tostring(nil)|lang=lua}}。</ref>,多余的参数会被忽略。一种常见的间接设置默认值的方式是,检查某个参数的值是否存在,如果为nil则赋值为默认值,例如: <syntaxhighlight lang=lua> function f(name) name = name or 'default' ... end </syntaxhighlight> ===== 方法 ===== 函数作为表的字段时可以作为'''方法(method)'''调用,会自动将表自身作为第一个参数。方法是'''面向对象'''的一种体现。 Lua并没有严格意义上的方法,但Lua提供了下面两种语法糖: * 声明方法:{{code|function table:method(args)|lang=lua}}等价于{{code|function table.method(self, args)|lang=lua}}; * 调用方法:{{code|table:method("foo")|lang=lua}}等价于{{code|table.method(table, "foo")|lang=lua}}。 此外,字符串也可以面向对象使用(参见[[#元表]])。
摘要:
请注意您对滚动的天空Wiki的所有贡献都被认为是在Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)下发布,请查看在
Project:版权
的细节。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
Cookie帮助我们提供我们的服务。通过使用我们的服务,您同意我们使用cookie。
更多信息
确定
导航
导航
首页
最近更改
随机页面
所有页面
帮助
格式
互助客栈
Wiki条例
管理员告示板
工具
导入页面
展开模板
创建或编辑任意页面
参数设置
Wiki工具
Wiki工具
特殊页面
页面值
获取缩短的URL
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志
其他项目
变体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體