函数
- 函数是对语句和表达式进行抽象的主要机制
两种用法
- 一是可以完成特定的任务,一句函数调用被视为一条语句
- 二是以只用来计算并返回特定的结果,视为一句表达式
print("Hello, World")
a = math.sin(3) + math.cos(10)
print(os.date())
- 无论哪种用法都需要将所有参数放到一对圆括号中
- 但如果参数是字面字符串或 table 构造式的话,可以放在括号中,也可以不放
- 即使在调用函数时没有参数,也必须有一个 () 空括号,如调用 os.date()
print "Hello, World" -- 等价于 print("Hello, World")
print {1, 2, 3} -- 等价于 print({1, 2, 3})
function add(a)
local sum = 0
for i, v in ipairs(a) do
sum = sum + v
end
return sum
end
b = {1, 2, 3}
add(b)
- function 是定义函数的关键字
- add 是函数名
- a 是函数的形式参数,是函数定义式参数列表中的参数
- add(b) 调用这个函数所传入的参数称为实际参数
- 调用函数的实际参数的个数可以与函数定义时的形式参数个数不同
- lua 会自动调整实参的数量,以匹配参数表的要求,这和多s重赋值类似
- 若实参少于形参,多余的形参被初始化为 nil
- 若实参多余形参,多余的实参被抛弃
- lua 程序既可以使用 以 lua 编写的函数,也可使用 C 语言编写的函数
function f(a, b)
return a or b
end
f(3) -- a = 3, b = nil
f(3, 4) -- a = 3, b = 4
f(3, 4, 5) -- a = 3, b = 4 ,5 被丢弃了
定义一个全局的计数器
function intCount(n)
n = n or 1 -- 赋值一个默认值
count = count + 1
end
面向对象式调用函数
- o.foo(o, x)
- o:foo(x) 等价于 o.foo(o, x)
- 冒号操作符使得我们在调用 o.foo 时隐含地将 o 作为函数的第一个参数