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

Lua: problems when using parameters to reference table values

关于参数,我遗漏了一些基本的东西。

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

print(say_name(obj,name))  --doesn't print "hey"

我不明白为什么这没有给出与 print(obj.name) 相同的输出,即“嘿”
更改函数会产生以下情况:

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

是不是因为我用参数引用了 table 值?我是否缺少一些规则?

Try this:

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

print(say_name(obj,"name"))

我在 name 周围添加了引号。 namenil,但您需要字符串 "name" 分别索引 obj.nameobj["name"]

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

来自Lua 5.4 Reference Manual - 3.2 Variables

Square brackets are used to index a table:

 var ::= prefixexp ‘[’ exp ‘]’

The meaning of accesses to table fields can be changed via metatables (see §2.4).

The syntax var.Name is just syntactic sugar for var["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

p.kp["k"]。跟你函数

的参数k没关系
function say_name(p,name) --works....why tho? isn't name a parameter like k is..?
    return p.name
end

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