木骰

数字型for与闭包


--数字型for 的语法
for i = 1,20,1 do 

end

--i为控制变量 将 从初始值1 变化到 目标值 20,其中步长为1。
--可以省略步长 则步长默认为1
for i = 1,20 do 

end

--lua数字型的for与c#的for差不多。不过有个地方不一样,就是闭包
local closure
for i=1,50 do 
	if i == 20 then
		closure = function ()
			print("closure:"..i)
		end
	end
end
--按照c#闭包的写法 执行closure将会输出50,然而这里输出的却是20
closure()	--closure:20 有此可见每次进到循环体的i都不是第一次声明的i,应该都是重新声明过的

--猜测数字型的for应该是类似于这样的一种写法
do 
	local var,target,step = 1,50,1
	while (step > 0 and var <= target) or (step < 0 and var >= target) do
		--每次进入循环体前 都重新声明i
		local i = var
		do
			--block
			if i == 10 then
				closure = function ()
					print("closure:"..i)
				end
			end
		end
		var = var + step
	end
end
closure()

-----------------------------------------------------
function func()
	local i = 1
	while i < 50 do 
		local j = i
		if i == 30 then
			closure = function ()
				print("closure j:"..j)
			end
		end
		i = i + 1
	end
end
func()
closure()	--closure j:30

— 于 共写了687个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*