Lua面向对象编程:表格问题

我的面向对象编程存在一些问题。 我有一个拥有清晰表格的父类和一个具有相同表格的子类。 但是当我尝试向子类表格中添加对象时,对象却被添加到了父类表格中。

以下是一个简单的例子:

(略,代码同上)

结果是 1 和 1。 但应该是 0 和 1。

我应该如何隔离子类表格和父类表格?

点赞
用户3586583
用户3586583

在 Lua 中,使用 acc.kit,其中 acc 是具有元表 Account 的表,将首先从表 acc 中搜索键 kit,然后从表 Account 中搜索。

在您的代码中,acc 没有任何带有键 kit 的内容,因此将访问 Account.kit

您可以通过在创建时为 acc 定义 kit 表来简单解决这个问题。

Account = {}
Account.__index = Account
Account.kit = {} -- 如果您不使用它,现在可以删除它 - 我保留了它以使测试打印仍然工作。

function Account.create(balance)
   local acnt = {}             -- our new object
   setmetatable(acnt,Account)  -- make Account handle lookup
   acnt.balance = balance      -- initialize our object
   acnt.kit = {}               -- define kit to be a subtable
   return acnt
end

例: https://repl.it/B6P1

2015-12-06 00:29:56
用户3314993
用户3314993

我建议使用闭包来实现面向对象编程:

local Animal = {}

function Animal.new(name)

  local self = {}
  self.name = name

  function self.PrintName()
    print("My name is " .. self.name)
  end

  return self

end

-- 现在有一个从 Animal 继承的类 dog
local Dog = {}

function Dog.new(name)

  -- 要从 Animal 继承,我们需要创建一个 Animal 的实例
  local self = Animal.new(name)

  function self.Bark()
    print(self.name .. " barked!")
  end

  return self

end

local fred = Dog.new("Fred")
fred.Bark()
fred.PrintName()

输出:

Fred barked!

My name is Fred

2015-12-09 19:00:19