表字段中的变量名不起作用

Posted

技术标签:

【中文标题】表字段中的变量名不起作用【英文标题】:Variable names in table field not working 【发布时间】:2013-03-21 18:31:42 【问题描述】:

我在为游戏编写一些代码时遇到了一个问题。看来我不能在语句中使用变量;

local Username = "Cranavvo"
game.Players.Username:BreakJoints() -- Kills the player

输出告诉我“No such user as 'Username'”应该是"Cranavvo"

【问题讨论】:

【参考方案1】:

来自Lua PiL on tables

要表示记录,您可以使用字段名称作为索引。 Lua 支持 通过提供 a.name 作为语法糖 a["name"]

初学者的一个常见错误是将 a.xa[x] 混淆。首先 form表示a["x"],即以字符串"x"为索引的表。

因此,当你尝试时:

game.Players.Username:BreakJoints()

Lua 将其解释为:

game["Players"]["Username"]:BreakJoints()

这当然是错的。如果您想使用不同的名称作为表的索引,请像这样使用它们:

local foo = "Cranavvo"
game.Players[foo]:BreakJoints()

但要提到的是Player 类没有BreakJoints 方法,您必须借助.Character 属性来获取字符model,如下所示:

local foo = "Cranavvo"
game.Players[foo].Character:BreakJoints()

另外要提到的是,如果同名的玩家不存在,代码会中断,而且角色可以为空,在这种情况下也会中断。因此,您需要添加一些错误处理。像这样:

local foo = "Cranavvo"
local Player = game.Players:findFirstChild(foo)
if Player ~= nil and Player.Character ~= nil then
    Player.Character:BreakJoints()
end

【讨论】:

@ZombieSpy 感谢您提供额外信息 :)【参考方案2】:

在 roblox 中执行此操作的正确方法是:

local Username = "Cranavvo"
local p = game.Players:FindFirstChild(Username)
if(p ~= nil) then
    if(p.Character ~= nil) then
        p.Character:BreakJoints()
    end
end

【讨论】:

【参考方案3】:

在你的代码被执行时仔细检查用户是否真的存在。

也应该是:

game.Players.Username:BreakJoints()

编辑:

我误读了您想要做的事情: 在

...Players.Username

lua 将 Username 解释为命名索引,并且不使用预先声明的 Username 变量。

如果你想访问一个动态名称的数组变量,你可以这样做:

game.Players[Username]:BreakJoints()

此外,在 roblox 中,您可以使用以下内容:

game.Players:GetPlayerByID(userId):BreakJoints()

【讨论】:

这只是我为 *** 做的一篇文章,例如我在脚本上的代码是正确的并链接到正确的库,只是我需要将“用户名”定义为“Cranavvo”,但它没有这样做。它认为“用户名”是库的名称。 我更新了答案,您需要以不同方式访问动态变量名称【参考方案4】:

Lua 中的变量有时会让人很困惑。

例如,有 globallocal 变量。

局部变量是操作结束后可以忘记/擦除的变量:local x = 2

全局变量是留在游戏/应用程序中不会被遗忘的变量,这对高分和其他简洁的东西很有用。 x = 2(注意没有“local”声明)

【讨论】:

这与问题有什么关系?

以上是关于表字段中的变量名不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在搜索循环中设置变量列通过工作表不起作用,

Postgresql:对 plpgsql 中的临时表执行更新不起作用

MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题

带有连接表字段排序的 Cakephp 分页不起作用

程序中的更新不起作用

JSON stringify 中的变量在 Rest 请求中不起作用