gpt4 book ai didi

oop - 在 __indexed 时使表表现得像值的优雅方式?

转载 作者:行者123 更新时间:2023-12-05 00:08:29 26 4
gpt4 key购买 nike

我的自制 OO 设计遇到了这个特殊问题:

Entity = {}
function Entity:new(o)
o = o or {}
return setmetatable(o, {__index = Entity})
end
function Entity:init() end
function Entity:think() end
function Entity:spawn()
--put in entity pool and begin drawing/logic
self:init()
end

Block = Entity:new{
x = 0,
y = 0,
color = {255, 255, 255, 255},
}
function Block:getPos()
return self.x, self.y
end
--setPos, getColor, setColor etc
function Block:init()
self:setColor(math.random(255), math.random(255), math.random(255))
end

a = Block:new()
a:spawn() --a new block with a random color
--a few seconds later...
b = Block:new()
b:spawn() --all blocks change to new color

color 表由所有原型(prototype)和实例共享。我怎样才能使该表表现得像一个字符串:

a = {table}
b = a
print(b[1]) -->table
a[1] = "object"
print(a[1], b[1]) -->object, table

相对于对象:

a = {table}
b = a
print(b[1]) -->table
a[1] = "object"
print(a[1], b[1]) -->object, object

TL;DR:我需要创建一个新的数据类型。

最佳答案

解决问题的方法有以下三种:

  1. Entity 对象初始化期间初始化 Entity.color 表 - 将其放在 Entity:new() 函数中。
  2. Entity.color 表替换为表示其内容的四个变量 – Entity.colorredEntity.colorgreen Entity.colorblue, Entity.coloralpha.
  3. 使 Entity:setColor() 创建一个新的 self.color 表,其中包含新值,而不是直接修改值。 self.color = {red, green, blue, alpha} 而不是 self.color[1] = red; self.color[2] = 绿色; self.color[3] = 蓝色; self.color[4] = alpha.

关于oop - 在 __indexed 时使表表现得像值的优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31024349/

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