重读Lua程序设计 温故知新
前7章
and 和 or 都是 短路求值 只在需要时才去评估第二个操作数
local x = a and b or c 需要 b != nil and b != false
![image-20240120100128060](C:\Users\Spell\AppData\Roaming\Typora\typora-user-images\image-20240120100128060.png
操作符优先级
table 链表设计思路
table 显式用表达式来初始化索引值
function 只有一个参数时 写法可忽略括号
function多返回值时 注意 若调用处 不为表达式得最后一个元素,则只产生一个返回值
在调用时 也可以将一个函数调用放入一对圆括号中,从而迫使它只返回一个结果
print( ( foo2() ) )
unpack 函数
变长参数
select
closure
匿名函数
function 尾调用
尾调用不会浪费栈空间 尾调用:调用完函数后 无需做其他事情就结束
iterate 迭代器
closure 支持
一个closure 就是一种可以访问其外部嵌套环境中的局部变量的函数
对于 closure 而言 这些变量就可用于在成功调用之间保持状态值 从而使 closure 可以记住它在一次遍历中所在的位置
迭代器函数 恒定状态 控制变量
chatgpt 对恒定状态得解释
在Lua中,迭代器是一种特殊的函数,它可以通过多次调用来遍历一个集合或者序列。迭代器函数通常会返回两个值:下一个元素的值以及一个表示是否还有更多元素的状态。
迭代器的状态可以是恒定的,也可以是可变的。恒定状态是指在每次调用迭代器函数时都保持不变的状态。这种状态通常用于迭代器函数的内部变量或者常量。在每次调用迭代器函数时,恒定状态都会被保留,而不会受到外部环境的影响。
理解恒定状态的关键是要明确区分它与可变状态的不同。可变状态是指在每次调用迭代器函数时可能会改变的状态。这种状态通常用于记录当前迭代的位置或者其他需要随着迭代器的前进而改变的信息。
通过将恒定状态与可变状态分离,迭代器可以更加灵活地处理不同的迭代需求。恒定状态可以用于保存一些不变的信息,例如集合的大小或者迭代器的起始位置。可变状态则可以用于追踪当前的迭代位置,以便返回正确的下一个元素。
总而言之,恒定状态是指在每次调用迭代器函数时保持不变的状态,它可以用于保存一些固定的信息。通过将恒定状态与可变状态分离,迭代器可以更加灵活地处理不同的迭代需求。
pairs ipairs 实现
– 待续