Function Lua:使用参数引用表值时出现问题

Function Lua:使用参数引用表值时出现问题,function,parameters,lua,Function,Parameters,Lua,当涉及到参数时,我遗漏了一些基本的东西 obj = { name = "hey" } function say_name(p,k) return p.k end print(say_name(obj,name)) --doesn't print "hey" 我不明白为什么它不能提供与print(对象名称)相同的输出,即“嘿” 更改函数会产生以下情况: function say_name(p) --works...makes sense

当涉及到参数时,我遗漏了一些基本的东西

obj = {
    name = "hey"
}
function say_name(p,k)
    return p.k
end

print(say_name(obj,name))  --doesn't print "hey"
我不明白为什么它不能提供与print(对象名称)相同的输出,即“嘿”
更改函数会产生以下情况:

function say_name(p) --works...makes sense to me
    return p.name
end
function say_name(p,k) --doesn't work...why does k not work the same as p?
    return p.k
end
function say_name(p,name) --works....why tho? isn't name a parameter like k is..?
    return p.name
end
是因为我引用了一个带有参数的表值吗?这有什么我不知道的规则吗

Try this:

obj = {
    name = "hey"
}
function say_name(p,k)
    return p[k]
end

print(say_name(obj,"name"))
我在
name
周围加了引号
name
nil
,但是您需要字符串
“name”
来分别索引
obj.name
obj[“name”]

p.k
相当于
p[“k”]
!这仅适用于有效Lua名称的字符串键。如果您有一个变量或任何其他键,则需要使用方括号表示法

方括号用于索引表格:

 var ::= prefixexp ‘[’ exp ‘]’
访问表字段的含义可以通过元表更改 (见§2.4)

语法var.Name只是var[“Name”]的语法糖:


p.k
p[“k”]
。它与函数的参数
k
无关


p.name
p[“name”]
。它与您的参数
名称
无关。这只是一个巧合,它适用于
obj.name
,因为
obj
有一个字段
“name”
,任何其他字符串都不起作用

我遇到了与代码更改相同的问题。i、 [无]对不起,我忘了引用。它是
sayname(obj,“name”)
 var ::= prefixexp ‘.’ Name
function say_name(p,k) --doesn't work...why does k not work the same as p?
    return p.k
end
function say_name(p,name) --works....why tho? isn't name a parameter like k is..?
    return p.name
end