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

Lua main.lua
local BankAccount = {}

function BankAccount:new(initialBalance)
    local privateData = {
        balance = initialBalance or 0,
        owner = "Unknown"
    }
    
    local publicInterface = setmetatable({}, {__index = self})
    
    function publicInterface:getBalance()
        return privateData.balance
    end
    
    function publicInterface:setOwner(name)
        if name and #name > 0 then
            privateData.owner = name
        end
    end
    
    function publicInterface:deposit(amount)
        if amount > 0 then
            privateData.balance = privateData.balance + amount
        end
    end
    
    function publicInterface:withdraw(amount)
        if amount > 0 and privateData.balance >= amount then
            privateData.balance = privateData.balance - amount
            return true
        end
        return false
    end
    
    return publicInterface
end

local account = BankAccount:new(1000)
account:setOwner("Иван")
account:deposit(500)
print(account:getBalance()) -- 1500
-- Попытка прямого доступа к балансу невозможна, так как он скрыт в замыкании
-- print(account.privateData.balance) -- Ошибка или nil
local BankAccount = {}

function BankAccount:new(initialBalance)
    local privateData = {
        balance = initialBalance or 0,
        owner = "Unknown"
    }
    
    local publicInterface = setmetatable({}, {__index = self})
    
    function publicInterface:getBalance()
        return privateData.balance
    end
    
    function publicInterface:setOwner(name)
        if name and #name > 0 then
            privateData.owner = name
        end
    end
    
    function publicInterface:deposit(amount)
        if amount > 0 then
            privateData.balance = privateData.balance + amount
        end
    end
    
    function publicInterface:withdraw(amount)
        if amount > 0 and privateData.balance >= amount then
            privateData.balance = privateData.balance - amount
            return true
        end
        return false
    end
    
    return publicInterface
end

local account = BankAccount:new(1000)
account:setOwner("Иван")
account:deposit(500)
print(account:getBalance()) -- 1500
-- Попытка прямого доступа к балансу невозможна, так как он скрыт в замыкании
-- print(account.privateData.balance) -- Ошибка или nil