如何将本地变量重置为原始值?

在编写 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 300,400。

是否可能在不覆盖函数外部的局部变量 x 和 y 的情况下,在example()函数内部调用 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()函数内部?

点赞
用户4261756
用户4261756

使用以下示例

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; -- 这里使用了声明的x,y,但是将它们分配给了名为x,y的本地变量…所以原始的x,y不会被重写
    o = (o and output(x,y)); -- 懒惰调用输出而不是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('原始变量值 =',x,y); -- 原始变量值 = 100 200
home(true); -- x = 150, y = 250
example1(true); -- x = 15, y = 20
example2(true); -- x = 50, y = 100
print('变量值 =',x,y); -- 变量值 = 100 200
2015-02-07 23:30:32