深入函数第一篇
- 函数是第一类值,具有特定的词法域
第一类值
- 第一类值的意思是函数与 lua 中的其他类型如数字,字符串具有相同的权力
- 函数可以存储到全局变量或局部变量变量,还可以存储到 table 中
- 可作为实参传递给其他函数,也可以作为其他函数的返回值
词法域
-
定义:一个函数可以嵌套在另一个函数中,内部函数可以访问外部函数定义的局部变量
-
函数与其他所有的值一样都是匿名的,没有名称
-
讨论
print()
函数时,相当于在讨论值仅为print()
的变量
a = {p = print}
a.p("Hello World") -- Hello World
c = print
c("eee") -- eee
print = math.sin
a.p(print(math.pi / 2)) -- 1
sin = a.p
sin(10, 20) -- 10 20
function foo(x)
return 2 * x
end
-- 等价于
foo = function (x) return 2 * x end
匿名函数
- 一个函数定义可以是一条赋值语句,这样的函数表达式可以视为函数构造式,这种函数构造式的结果称为