Код IT Загрузка примера кода…

Lua main.lua
local Product = {}

function Product:new(name, price)
    local obj = setmetatable({name = name, price = price}, {__index = self})
    return obj
end

local Cart = {}

function Cart:new()
    local obj = setmetatable({items = {}}, {__index = self})
    return obj
end

function Cart:add(product)
    table.insert(self.items, product)
    print("В корзину добавлено: " .. product.name .. " (" .. product.price .. " ₽)")
end

function Cart:total()
    local sum = 0
    for _, p in ipairs(self.items) do
        sum = sum + p.price
    end
    return sum
end

local Order = {}

function Order:new(cart)
    local items = {}
    for _, item in ipairs(cart.items) do
        table.insert(items, item)
    end
    local obj = setmetatable({items = items, total = cart:total()}, {__index = self})
    return obj
end

function Order:checkout()
    print("Оформление заказа...")
    for _, item in ipairs(self.items) do
        print("  — " .. item.name .. ": " .. item.price .. " ₽")
    end
    print("Итого: " .. self.total .. " ₽")
    print("Заказ оформлен!")
end

local cart = Cart:new()
cart:add(Product:new("Книга", 500))
cart:add(Product:new("Ручка", 50))
local order = Order:new(cart)
order:checkout()
local Product = {}

function Product:new(name, price)
    local obj = setmetatable({name = name, price = price}, {__index = self})
    return obj
end

local Cart = {}

function Cart:new()
    local obj = setmetatable({items = {}}, {__index = self})
    return obj
end

function Cart:add(product)
    table.insert(self.items, product)
    print("В корзину добавлено: " .. product.name .. " (" .. product.price .. " ₽)")
end

function Cart:total()
    local sum = 0
    for _, p in ipairs(self.items) do
        sum = sum + p.price
    end
    return sum
end

local Order = {}

function Order:new(cart)
    local items = {}
    for _, item in ipairs(cart.items) do
        table.insert(items, item)
    end
    local obj = setmetatable({items = items, total = cart:total()}, {__index = self})
    return obj
end

function Order:checkout()
    print("Оформление заказа...")
    for _, item in ipairs(self.items) do
        print("  — " .. item.name .. ": " .. item.price .. " ₽")
    end
    print("Итого: " .. self.total .. " ₽")
    print("Заказ оформлен!")
end

local cart = Cart:new()
cart:add(Product:new("Книга", 500))
cart:add(Product:new("Ручка", 50))
local order = Order:new(cart)
order:checkout()