Lua:使用参数引用表值时的问题
Posted
技术标签:
【中文标题】Lua:使用参数引用表值时的问题【英文标题】:Lua: problems when using parameters to reference table values 【发布时间】:2021-07-01 23:10:37 【问题描述】:我在参数方面缺少一些基本的东西。
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
是不是因为我用参数引用了一个表值?我错过了一些规则吗?
【问题讨论】:
【参考方案1】: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
方括号用于索引表格:
var ::= prefixexp ‘[’ exp ‘]’
可以通过元表更改访问表字段的含义 (参见第 2.4 节)。
语法 var.Name 只是 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"
,任何其他字符串都不起作用
【讨论】:
我对你所做的代码更改遇到了同样的问题。即[无] 抱歉忘记了引号。这是sayname(obj, "name")
以上是关于Lua:使用参数引用表值时的问题的主要内容,如果未能解决你的问题,请参考以下文章