lua - 理解 Lua 中的类
问题描述
我一直在 Lua 中玩耍,以了解在 Lua 中定义“类”时为什么以及如何获得“尝试调用字段'副本'(零值)”。
local factionClass = {}
factionClass.Name = "throwaway"
function factionClass:New(name)
local newFaction = table.Copy(factionClass)
if name then
newFaction.Name = name
end
return newFaction
end
factionCoolguys = Faction("cool guys")
解决方案
Lua 没有对象或类的概念;它们通常实现为包含函数的表。
该错误的原因正如它所说的那样:您试图调用 nil。您尝试调用的函数
table.copy
,不存在,因此当您尝试调用它时 Lua 会抱怨。这是因为:如果某些东西是未定义的,它就是
nil
,这是一个有效的“值”,不像在像 C 这样的语言中,未定义的变量根本不存在。nil
但是不能调用,这会导致您的错误。在几乎所有情况下,“尝试调用字段 X(nil 值)”应该读作“尝试调用不存在的函数(X)”,这将是一个更易于理解的错误消息。
不是将类的内容复制到新实例中,而是在 Lua 中使用元表来查找在其类中的对象中不存在的键。有关这方面的更多信息,请参阅在 Lua 中编程。
推荐阅读
- python - 我可以从共享文件中导入模块列表吗?即我可以进口进口吗?
- javascript - 在Javascript中使用双花括号解析字符串模板内的变量
- powershell - Powershell:格式表 | 导出-CSV
- python - Pyspark 从数字列中删除字符串(或估算它们)
- python - 如何通过 HTTP 请求提供临时文件(非静态)?
- c++ - 为什么我不能将 std::copy 与 std::string 一起使用到另一个 std::string?
- python - Python request.get 在特定站点上失败
- apache-spark - spark 2.4.4 在 spark 会话中声明时失败的核心数
- query-builder - Codeigniter 4 未定义索引:user_id
- rust - 什么是需要枚举中的元组变体的独特/特殊情况?