【发布时间】:2018-02-10 19:38:53
【问题描述】:
我想我错过了一些关于变量范围和/或默认值如何工作的内容。考虑以下函数:
function printtable(x, indentation_level)
indentation_level = indentation_level or 0
function indent()
dent = ''
for i=1,indentation_level do
dent = dent..'__'
end
return dent
end
if type(x) ~= 'table' then
return tostring(x)
end
rpr = ''
for k, v in pairs(x) do
rpr = rpr..indent()..'['..printtable(k)..']'..' = '..printtable(v, indentation_level+1)
end
return rpr
end
当我用
调用它时t = {1,2,3}
print(printtable(t))
我会得到[1] = 1__[2] = 2__[3] = 3
我期待的是[1] = 1[2] = 2[3] = 3
我在python中重写了函数,看看我的逻辑错误在哪里:
def printdict(x, indentation_level=0):
def indent():
dent = ''
for i in range(indentation_level):
dent += '__'
return dent
if type(x) != dict:
return str(x)
rpr = ''
for k, v in x.items():
rpr = rpr+indent()+'['+printdict(k)+'] = '+printdict(v, indentation_level+1)
return rpr
当我调用它时:
t = {1:1,2:2,3:3}
print(printdict(t))
我得到了我的期望:[1] = 1[2] = 2[3] = 3
那么,lua 版本是怎么回事?关于变量范围或导致差异的其他一些机制,我缺少什么?
【问题讨论】:
-
你在函数缩进前缺少了一个本地infront
-
我推荐这个阅读:lua-users.org/wiki/ScopeTutorial
-
再次尝试,使用本地功能。按预期工作。没关系。您还应该在 indent 函数中将凹痕值设为本地。
-
@WilliamWalsh(这是语言律师或您可能不知道的东西。)只有变量是本地或全局的;值,包括函数,没有范围。
local function是以下语句的语法:1) 创建一个局部变量,然后 2) 评估函数定义以获得函数值并将其分配给变量。
标签: lua scope default-value