错误:尝试索引本地“自我”(零值)

Posted

技术标签:

【中文标题】错误:尝试索引本地“自我”(零值)【英文标题】:Error: attempt to index local 'self' (a nil value) 【发布时间】:2014-08-10 02:30:05 【问题描述】:

我正在学习有关 Lua 的教程,专门用于在游戏 Garry's Mod 中制作游戏模式。我已经看了一段时间了,我根本找不到问题所在。

function ply:databaseFolders()
   return "server/example/players/" .. self:ShortSteamID() .. "/"    --ref. A
end


function ply:databasePath()
   return self:databaseFolders() .. "database.txt"    --ERROR line here, goes up
end


function ply:databaseExists()
   local f = file.Exists(self.databasePath(), "DATA")    --goes up here
   return f
end


function ply:databaseCheck()
   self.database = 
   local f = self:databaseExists()     --goes up here
   ...
end


function GM:PlayerAuthed(ply, steamID, uniqueID)
   ply:databaseCheck()                                         --goes up here
   print("Player: " .. ply:Nick() .. " has gotten authed.")
end

代码总结:我想在上面的目录下创建一个database.txt文件。

Edit1:当所有玩家离开游戏时,参考。已到达 A,但没有在目录中创建文件。

【问题讨论】:

Attempt to index local 'self' (a nil value) 的可能重复项 【参考方案1】:

当您调用函数databasePath 时,您没有使用OOP 语法;因此self 不会隐式传递给函数。从此,错误。更改以下内容:

function ply:databaseExists()
   local f = file.Exists(self:databasePath(), "DATA")
   -- notice the use of ---> : <--- here
   return f
end

【讨论】:

非常感谢!!是的,这行得通。 ':' 与 '.'对我来说很奇怪,因为这是我第一次遇到它。 @cid:: 方法的语法调用了一个特定于 Lua 的怪癖。不过有good reasons也是这样的。 在python中其实很相似

以上是关于错误:尝试索引本地“自我”(零值)的主要内容,如果未能解决你的问题,请参考以下文章

尝试索引全局 'io'(零值)

LUA 错误:尝试索引零值 @6:16

为啥 TIC-80 让我尝试索引零值错误?

Lua 尝试索引? (零值)

Lua 脚本 - 尝试索引全局(零值)

Lua 尝试索引全局“自我”错误(GMod Lua 脚本)