如何将局部变量重置为原始值?

时间:2015-02-07 20:53:35

标签: lua scope

在为IOS编写机器人脚本时,我想使用特定坐标来检查当前屏幕状态的位置。我将通过使用命令调用坐标的rgb颜色来完成此操作。这是一个例子,假设print将返回rgb。


local x=100
local y=200

function getxy()
   print(x .. "," .. y)
end

function example()
   x=200
   y=300
   getxy()
end

function example2()
   x=300
   y=400
   getxy()
end

getxy()
example()
getxy()
example2()

如果你运行它会返回 100,200 200,300 200,300 300400

是否可以在example()内调用x和y而不覆盖函数外的本地x和局部y?


编辑:我的解决方案

local x=100
local y=200

function getxy()
   print(x .. "," .. y)
end

function home()
   x=100
   y=200
end

function example()
   x=200
   y=300
   getxy()
   home()
end

function example2()
   x=300
   y=400
   getxy()
   home()
end

getxy()
example()
getxy()
example2()

现在运行此将返回100,200 200,300 100,200 300,400

这正是我想要的。

所以我添加了另一个名为home()的函数。这对我想要完成的事情有效吗,还是应该将home()调用置于getxy()函数内?

1 个答案:

答案 0 :(得分:0)

使用以下示例

local x,y = 100,200;
function output(x,y)
    print('x =',x,', y =',y);
end

function home(o)
    local x,y = x+50,y+50; -- this uses the declared x,y but assigns them to a local variables named x,y... so original x,y won't be rewritten..
    o = (o and output(x,y)); -- lazy call to output instead doing if then end..
end
function example1(o)
    local x,y = 15,20;
    o = (o and output(x,y));
end
function example2(o)
    local x,y = x*x/(x+x),y*y/(y+y);
    o = (o and output(x,y))
end
print('original variables value =',x,y); -- original variables value = 100 200
home(true); -- x = 150, y = 250
example1(true); -- x = 15, y = 20
example2(true); -- x = 50, y = 100
print('variables value =',x,y); -- variables value = 100 200