举例简介Lua中函数的基本用法
Lua函数定义简洁,支持递归如斐波那契数列。闭包可记忆外部变量,实现加法器。函数支持多返回值,赋值时长度不匹配部分被忽略。函数作为一等公民,全局与局部定义等价,局部函数需注意自引用。字符串参数调用时可省略括号。
先从一个经典的递归例子说起——斐波那契数列。在Lua中,函数定义非常简单直接:
function fib(n)
if n < 2 then return 1 end
return fib(n - 2) + fib(n - 1)
end
接下来看看Lua对闭包和匿名函数的支持,在实际编程中非常实用。看这个加法器:调用 adder(x) 时,它会创建一个匿名函数并记住变量 x 的值——这就是闭包的核心:
function adder(x)
-- 调用adder时,会创建用于返回的函数,并且能记住变量x的值:
return function (y) return x + y end
end
a1 = adder(9)
a2 = adder(36)
print(a1(16)) --> 25
print(a2(64)) --> 100Lua 里的返回值、函数调用和赋值都支持长度不匹配的列表——不匹配的接收方会被赋为 nil,不匹配的发送方则直接忽略。举个例子:
x, y, z = 1, 2, 3, 4
-- 现在x = 1, y = 2, z = 3, 而 4 会被丢弃。再来看一个函数返回多个值的例子,调用时只接收部分返回值,多余的会被丢弃:
function bar(a, b, c)
print(a, b, c)
return 4, 8, 15, 16, 23, 42
end
x, y = bar('zaphod') --> prints "zaphod nil nil"
-- 现在 x = 4, y = 8, 而值15..42被丢弃。在Lua中,函数是“一等公民”,既可以是全局的也可以是局部的。下面两种写法完全等价:
function f(x) return x * x end
f = function (x) return x * x end同样,局部函数也有两种等效写法——注意第二种用 local g; g = function ... 的方式,是为了让函数体内部能够自引用:
local function g(x) return math.sin(x) end
local g; g = function (x) return math.sin(x) end
-- 'local g'可以支持g自引用。顺便提一下,三角函数是以弧度为单位的。
最后,当用单个字符串参数调用函数时,括号可以省略——这种语法糖写起来很顺手:
print 'hello' --可以工作。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















