在 Lua 上将对象添加到数组
Adding objects to array on Lua
首先,我是 lua 的新手,我正在尝试实现一个简单的购物车作为面向对象的练习。
所以我定义了一个购物车对象,它存储了几个项目对象
Cart = {
items = {},
discount = 0
}
function Cart:new(discount)
local object = {}
setmetatable(object, {__index = self})
self.discount = discount
return object
end
function Cart:addItem(item)
table.insert(self.items, item)
end
function Cart:GetTotal()
local total = 0
for i = 1, #self.items do
total = total + self.items[i]:GetPrice()
end
return total - self.discount
end
每个项目都有计算价格的责任:
Item = {
units = 0,
pricePerUnit = 5,
name = ""
}
function Item:new(units, pricePerUnit, name)
local object = {}
setmetatable(object, {__index = self})
self.units = units
self.pricePerUnit = pricePerUnit
self.name = name
return object
end
function Item:GetPrice()
return self.units * self.pricePerUnit
end
但是当我创建对象并添加项目时,结果是 60,当我调试脚本时,我发现 table 的所有元素都相同,就好像它们被覆盖了一样,有人可以解释一下吗为什么以及如何解决?提前致谢。
local shoppingCart = Cart:new(0)
shoppingCart:addItem(Item:new(1, 10, "Oranges"))
shoppingCart:addItem(Item:new(1, 15, "lemons"))
shoppingCart:addItem(Item:new(1, 20, "Strawberries"))
print(shoppingCart:GetTotal())
Cart:new
和 Item:new
旨在创建新对象,因此您在 classes 本身而不是实例上调用它们。这意味着传递给这些方法的 self
是那些 classes.
在这两种方法中,您都创建了一个 object
table 来成为新对象,因此您需要在该对象上设置字段,而不是修改 class ,例如,object.discount = discount
.
首先,我是 lua 的新手,我正在尝试实现一个简单的购物车作为面向对象的练习。
所以我定义了一个购物车对象,它存储了几个项目对象
Cart = {
items = {},
discount = 0
}
function Cart:new(discount)
local object = {}
setmetatable(object, {__index = self})
self.discount = discount
return object
end
function Cart:addItem(item)
table.insert(self.items, item)
end
function Cart:GetTotal()
local total = 0
for i = 1, #self.items do
total = total + self.items[i]:GetPrice()
end
return total - self.discount
end
每个项目都有计算价格的责任:
Item = {
units = 0,
pricePerUnit = 5,
name = ""
}
function Item:new(units, pricePerUnit, name)
local object = {}
setmetatable(object, {__index = self})
self.units = units
self.pricePerUnit = pricePerUnit
self.name = name
return object
end
function Item:GetPrice()
return self.units * self.pricePerUnit
end
但是当我创建对象并添加项目时,结果是 60,当我调试脚本时,我发现 table 的所有元素都相同,就好像它们被覆盖了一样,有人可以解释一下吗为什么以及如何解决?提前致谢。
local shoppingCart = Cart:new(0)
shoppingCart:addItem(Item:new(1, 10, "Oranges"))
shoppingCart:addItem(Item:new(1, 15, "lemons"))
shoppingCart:addItem(Item:new(1, 20, "Strawberries"))
print(shoppingCart:GetTotal())
Cart:new
和 Item:new
旨在创建新对象,因此您在 classes 本身而不是实例上调用它们。这意味着传递给这些方法的 self
是那些 classes.
在这两种方法中,您都创建了一个 object
table 来成为新对象,因此您需要在该对象上设置字段,而不是修改 class ,例如,object.discount = discount
.