Lua奇技淫巧之一——模拟Pascal中的with

作者在 2018-03-29 12:01:31 发布以下内容

Pascal(Delphi)、VB中都有一个with关键字,可以帮助程序员减少大量的输入、提高效率。Lua 中没有这个关键字,但我们可以利用以下方式模拟。 

例:

a={}
setfenv(function()
    a=1
    b=2
end,a)()

以上代码效果等于:

a.a=1
a.b=2

等价于Pascal中的:

with a do
  begin
    a:=1;
    b:=2;
  end;

当然,这样只能用于赋值,如果需要在a{}中写函数就不能这么写了。这时可以这样写:

a=setmetatable({}, {__index = _G})
setfenv(function()
    a=1
    b=2
    function c()
	print("OK")
	return 0
    end
end, a)()

以上代码效果等于:


a.a = 1
a.b = 2
function a.c()
    print("OK")
    return 0
end


Lua | 阅读 1742 次
文章评论,共0条
游客请输入验证码
浏览37960次
最新评论