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
周围添加了引号。 name
是 nil
,但您需要字符串 "name"
分别索引 obj.name
或 obj["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.k
是 p["k"]
。跟你函数
的参数k
没关系
function say_name(p,name) --works....why tho? isn't name a parameter like k is..?
return p.name
end
p.name
是 p["name"]
。与你的参数name
无关。它适用于 obj.name
只是巧合,因为 obj
有一个字段 "name"
,任何其他字符串都不起作用
关于参数,我遗漏了一些基本的东西。
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
周围添加了引号。 name
是 nil
,但您需要字符串 "name"
分别索引 obj.name
或 obj["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.k
是 p["k"]
。跟你函数
k
没关系
function say_name(p,name) --works....why tho? isn't name a parameter like k is..? return p.name end
p.name
是 p["name"]
。与你的参数name
无关。它适用于 obj.name
只是巧合,因为 obj
有一个字段 "name"
,任何其他字符串都不起作用