lua 元表机制-小计


1/

test1 = {  test01=1  } 
test2 = {  test02=1  }  
setmetatable(test1, test2) 
print(test1.test02)                         --nil

 

2/

test1 = {  test01=1  } 

test2 = {  test02=1  }  

test2.__index = test2
setmetatable(test1, test2) 
print(test1.test02)                         --1

 

3/

test1 = {  test01=1  } 

test2 = {  test02=1  }

test3 = {  test02=1111  }

test2.__index = test3
setmetatable(test1, test2) 
print(test1.test02)                         --1111

 

### Lua 编程中的闭包概念 在 Lua 中,函数是一等公民,这意味着可以像处理其他数据类型一样自由地操作它们。闭包是指能够记住并访问其词法作用域的函数,即使这个函数在其创建的作用域之外执行[^1]。 #### 创建闭包的方式 通过返回一个内部定义的新函数来创建闭包: ```lua function newCounter() local count = 0 return function() -- 返回匿名函数作为闭包 count = count + 1 return count end end local counterA = newCounter() print(counterA()) --> 输出: 1 print(counterA()) --> 输出: 2 ``` 此代码片段展示了如何利用闭包特性保存状态 `count` 变量,在每次调用时增加计数值。 #### 使用场景 闭包常用于实现私有变量、回调机制以及事件处理器等功能。由于闭包能捕获外部环境的状态,因此非常适合用来封装特定逻辑及其所需的数据上下文关系。 #### 实际应用案例 考虑如下例子,展示了一个简单的装饰器模式实现方法: ```lua -- 定义一个日志记录功能的装饰器 function logDecorator(fn) return function(...) print("Calling function with args:", table.concat({...}, ", ")) fn(...) -- 调用原始函数 print("Function call finished.") end end -- 应用装饰器到目标函数上 local greet = logDecorator(function(name) print("Hello, " .. name) end) greet("World") -- 执行被装饰后的函数 ``` 上述实例中,`logDecorator()` 函数接收另一个函数作为参数,并返回一个新的带有额外行为(即打印输入参数和结束消息)的版本。这里就体现了闭包的应用价值所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值