Открыть меню
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Модуль:Operator

Материал из wiki.iccup.org
Версия от 19:54, 3 сентября 2024; DarkMuse (обсуждение | вклад) (Новая страница: «--- -- @iCCup -- wiki=iCCup -- page=Module:Operator -- -- Пожалуйста, посетите https://iccup.com/wiki/ чтобы узнать, как внести свой вклад -- local Operator = {} --- Сложение с использованием метаметода __add (a + b) ---@param a number ---@param b number ---@return number function Operator.add(a, b) return a + b end --- Вычитание с использованием ме...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Для документации этого модуля может быть создана страница Модуль:Operator/doc

---
-- @iCCup
-- wiki=iCCup
-- page=Module:Operator
--
-- Пожалуйста, посетите https://iccup.com/wiki/ чтобы узнать, как внести свой вклад
--

local Operator = {}

--- Сложение с использованием метаметода __add (a + b)
---@param a number
---@param b number
---@return number
function Operator.add(a, b)
	return a + b
end

--- Вычитание с использованием метаметода __sub (a - b)
---@param a number
---@param b number
---@return number
function Operator.sub(a, b)
	return a - b
end

--- Умножение с использованием метаметода __mul (a * b)
---@param a number
---@param b number
---@return number
function Operator.mul(a, b)
	return a * b
end

--- Деление с использованием метаметода __div (a / b)
---@param a number
---@param b number
---@return number
function Operator.div(a, b)
	return a / b
end

--- Возведение в степень с использованием метаметода __pow (a ^ b)
---@param a number
---@param b number
---@return number
function Operator.pow(a, b)
	return a ^ b
end

--- Сравнение на равенство с использованием метаметода __eq (a == b)
---@param a any
---@param b any
---@return any
function Operator.eq(a, b)
	return a == b
end

--- Сравнение на неравенство с использованием метаметода __eq с отрицанием результата (a ~= b)
---@param a any
---@param b any
---@return any
function Operator.neq(a, b)
	return a ~= b
end

--- Возвращает функцию, получающую свойство объекта
---@param item string|number
---@return fun(tbl: table): any
function Operator.property(item)
	if string.find(item, '%.') then
		error('Путь еще не поддерживается в property')
	end
	return function(tbl)
		return tbl[item]
	end
end

--- Возвращает функцию вызова метода объекта
---@param funcName string|number
---@param ... any
---@return fun(obj: any, ...): any
function Operator.method(funcName, ...)
	local args = {...}
	return function(obj)
		return obj[funcName](obj, unpack(args))
	end
end

return Operator