lua 基础知识

一、ipairs 和 pairs 的区别:

翻译成自己的话:

ipairs 会一直遍历下去,遇到key 对应的value 为nil时,会退出;

pairs 会一直遍历下去

举个例子:

local tabFiles = {
[3] = "test2",
[6] = "test3",
[4] = "test1"
}
 
for k, v in ipairs(tabFiles) do
print(k, v)
end
 
 
猜测它的输出结果是什么呢?
 
根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。
 
>lua -e "io.stdout:setvbuf 'no'" "Test.lua"
>Exit code: 0
 
那么,如果是
for k, v in pairs(tabFiles) do
print(k, v)
end
则会输出所有 :
>lua -e "io.stdout:setvbuf 'no'" "Test.lua" 
3 test2
6 test3
4 test1

 

### Lua编程语言基础面试知识点 #### 1. **元表 (Metatable)** Lua 中的元表是一个强大的特性,用于定义表的行为。通过设置 `__index` 和 `__newindex` 等字段,可以控制访问和修改键值的操作。 - 当尝试访问一个不存在的键时,会触发 `__index` 字段[^1]。 - 如果希望拦截对新键赋值的操作,则可以通过 `__newindex` 来实现。 ```lua local mt = {} mt.__index = function(table, key) return "Default Value" end local myTable = setmetatable({}, mt) print(myTable["nonexistentKey"]) -- 输出 Default Value ``` #### 2. **函数作为一等公民** 在 Lua 中,函数是一等公民,这意味着它们可以像其他变量一样被传递、返回或存储。这种灵活性使得闭包成为可能。 ```lua function createCounter() local count = 0 return function() count = count + 1 return count end end local counter = createCounter() print(counter()) -- 输出 1 print(counter()) -- 输出 2 ``` #### 3. **协程 (Coroutine)** Lua 提供了轻量级线程的支持,称为协程。它允许程序暂停执行并稍后恢复,而不会阻塞整个应用程序。 ```lua function coExample() coroutine.yield(10) coroutine.yield(20) end co = coroutine.create(coExample) print(coroutine.resume(co)) -- 输出 true 10 print(coroutine.resume(co)) -- 输出 true 20 ``` #### 4. **字符串操作** Lua 的标准库提供了丰富的字符串处理功能,包括模式匹配、替换以及分割等功能。 ```lua -- 替换字符串中的子串 str = string.gsub("hello world", "world", "Lua") print(str) -- 输出 hello Lua ``` #### 5. **垃圾回收机制** Lua 使用自动内存管理来释放不再使用的对象。开发者无需手动分配或释放内存资源。 #### 6. **性能优化技巧** 虽然 Lua 是一种解释型脚本语言,但在某些场景下仍需注意效率问题。例如,在处理大规模数据集时,应优先考虑更高效的算法而非简单暴力的方法[^2]。 假设有一个需求是从大量整数中找出前 K 小的数值: - 可以利用最小堆结构完成此任务; - 或者借助快速选择算法(Quickselect),这是一种基于分区思想的技术,平均时间复杂度为 O(n)[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值