Lua程序设计(七十一)

访问局部变量

通过函数 debug.getlocal 来检查任意活跃函数的局部变量。该函数有两个参数,一个是要查询的栈层次,另一个则是变量的索引。该函数返回两个值,变量名和变量的当前值。如果变量索引大于活跃变量的数量,那么函数 getlocal 返回 nil。如果栈层次无效,则会抛出异常(可以使用函数 debug.getinfo 来检查栈层次是否有效。)

Lua 语言按局部变量在函数中出现的顺序对它们进行编号,但编号只限于函数当前作用域中活跃的变量。

function foo (a, b)
	local x
	do local c = a - b end
	local a = 1
	while true do
		local name, value = debug.getlocal(1, a)
		if not name then break end
		print(name, value)
		a = a + 1
	end
end

调用 **foo(10, 20) 将会输出:

a	10
b	20
x	nil
a	4

索引为1的变量为 a (第一个参数), 索引为2的变量是 b, 索引为3的变量是 x, 索引为4的变量是内层的 a。在函数 getlocal被调用的时候, c 已经离开了作用域,而 namevalue 还未出现于作用域内,

Lua 5.2 开始, 值为负的索引获取可变长参数的额外参数。 还可以通过函数 debug.setlocal 来改变局部变量的值,该函数的前两个参数与 getlocal 相同,分别是栈层次和变量索引,而第三个参数则是该局部变量的新值。该函数的返回值是变量名,如果变量索引超出了范围则返回 nil

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值