gpt4 book ai didi

lua - 一个Lua "Class"的两个实例是相同的 "object"

转载 作者:行者123 更新时间:2023-12-01 12:06:28 25 4
gpt4 key购买 nike

我正在使用 Love2d 和 Lua,看看我的自定义 Lua“类”:

-- Tile.lua
local Tile = { img = nil, tileType = 0, x = 0, y = 0 }

function Tile:new (img, tileType, x, y)
o = {}
setmetatable(o, self)
self.__index = self
self.img = img or nil
self.tileType = tileType or 0
self.x = x or 0
self.y = y or 0
return o
end

function Tile:getX ()
return self.x
end

return Tile

并使用类:

-- main.lua
Tile = require("src/Tile")

function love.load()
myGrass = Tile:new(nil, 0, 0, 0)
print(myGrass:getX()) -- 0
otherGrass = Tile:new(nil, 0, 200, 200)
print(myGrass:getX()) -- 200
end

因此,我创建了一个名为 myGrassTilex = 0,然后我创建了另一个名为 TileTile otherGrass 现在 x = 200,结果:我的第一个 TilemyGrass,改变她自己的 x 属性从 0 到 200 因此 MyGrassotherGrass 是同一个对象(表)。

最佳答案

这个有效:

function Tile:new(img, tileType, x, y)
local o = {}

setmetatable(o, {__index = self})

o.img = img or nil
o.tileType = tileType or 0
o.x = x or 0
o.y = y or 0

return o
end

为新表分配新值,而不是self

关于lua - 一个Lua "Class"的两个实例是相同的 "object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56097297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com