表作用域块 |
|
A = {} using A in foo = 5; bar = "Hello World"; end write(A.foo, A.bar) -- Will print out "5Hello World"
实现此方法的基本方法是在块中用表作用域替换全局作用域。由于这是一个块,它保证全局作用域永远不会丢失。
这在 Lua 中的 OO 实现中可能很有用,可以更好地利用 self。如果你将 self 置于作用域中,那么它将再次更像“C”
function A:foo(x) local y bar = x -- Sets self.bar to x [and where comes x from? --ET] y = x -- Sets local variable y self.y = x -- Sets self.y end
可能可以完成此示例以准确显示如何设置标签
这将需要使用函数标签,其中使用块放置在实际函数调用周围。
这在创建 Lua 包时也可能有所帮助。在 python 中,如果模块使用全局作用域,它实际上访问模块字典中的变量。经过一些努力,可以使用“using..in”块创建相同的效果。
还有一个问题是,这将如何与上述建议(变量被假定为局部变量)一起工作。
2. 我发现例如在 C++ 中,你无法看到标识符是类成员还是全局变量。你必须查找类定义。编写 self.x 使得清楚地知道访问的是字段而不是全局变量。我必须同意这一点。许多 C++ 程序员甚至使用约定将所有成员变量声明以 m_ 开头,以明确表明当使用它时,访问的是成员变量。--PeterPrade
--ET
tab = { tab2={ x=3 } } do local t = tab.tab2 print (t.x) t.x = 4 end print (t) -- nil as out of scope now
--NDT