Module:Array: Difference between revisions

Jump to navigation Jump to search
osrsw>CephHunter
Update
osrsw>CephHunter
Fix param order on take_every
Line 59: Line 59:
---@param rhs number|number[]|Array
---@param rhs number|number[]|Array
---@param funName string
---@param funName string
---@param opName string
---@param fun fun(lhs: number, rhs: number): number
---@param fun fun(lhs: number, rhs: number): number
---@return Array
---@return Array
local function mathTemplate(lhs, rhs, funName, fun)
local function mathTemplate(lhs, rhs, funName, opName, fun)
checkTypeMulti('Module:Array.' .. funName, 1, lhs, {'number', 'table'})
checkTypeMulti('Module:Array.' .. funName, 1, lhs, {'number', 'table'})
checkTypeMulti('Module:Array.' .. funName, 2, rhs, {'number', 'table'})
checkTypeMulti('Module:Array.' .. funName, 2, rhs, {'number', 'table'})
Line 75: Line 76:
end
end
else
else
assert(#lhs == #rhs, string.format('Tables are not equal length (lhs=%d, rhs=%d)', #lhs, #rhs))
assert(#lhs == #rhs, string.format('Elementwise %s failed because arrays have different sizes (left: %d, right: %d)', opName, #lhs, #rhs))
for i = 1, #lhs do
for i = 1, #lhs do
res[i] = fun(lhs[i], rhs[i])
res[i] = fun(lhs[i], rhs[i])
Line 85: Line 86:


function Array.__add(lhs, rhs)
function Array.__add(lhs, rhs)
return mathTemplate(lhs, rhs, '__add', function(x, y) return x + y end)
return mathTemplate(lhs, rhs, '__add', 'addition', function(x, y) return x + y end)
end
end


function Array.__sub(lhs, rhs)
function Array.__sub(lhs, rhs)
return mathTemplate(lhs, rhs, '__sub', function(x, y) return x - y end)
return mathTemplate(lhs, rhs, '__sub', 'substraction', function(x, y) return x - y end)
end
end


function Array.__mul(lhs, rhs)
function Array.__mul(lhs, rhs)
return mathTemplate(lhs, rhs, '__mul', function(x, y) return x * y end)
return mathTemplate(lhs, rhs, '__mul', 'multiplication', function(x, y) return x * y end)
end
end


function Array.__div(lhs, rhs)
function Array.__div(lhs, rhs)
return mathTemplate(lhs, rhs, '__div', function(x, y) return x / y end)
return mathTemplate(lhs, rhs, '__div', 'division', function(x, y) return x / y end)
end
end


function Array.__pow(lhs, rhs)
function Array.__pow(lhs, rhs)
return mathTemplate(lhs, rhs, '__pow', function(x, y) return x ^ y end)
return mathTemplate(lhs, rhs, '__pow', 'exponentiation', function(x, y) return x ^ y end)
end
end


Line 936: Line 937:
---@param arr T
---@param arr T
---@param n integer # Step size.
---@param n integer # Step size.
---@param start? integer # Start index.
---@param count? integer # Max amount of elements to get.
---@param count? integer # Max amount of elements to get.
---@param start? integer # Start index.
---@return T
---@return T
function Array.take_every(arr, n, count, start)
function Array.take_every(arr, n, start, count)
checkType('Module:Array.take_every', 1, arr, 'table')
checkType('Module:Array.take_every', 1, arr, 'table')
checkType('Module:Array.take_every', 2, n, 'number')
checkType('Module:Array.take_every', 2, n, 'number')
checkType('Module:Array.take_every', 3, count, 'number', true)
checkType('Module:Array.take_every', 3, start, 'number', true)
checkType('Module:Array.take_every', 4, start, 'number', true)
checkType('Module:Array.take_every', 4, count, 'number', true)
count = count or #arr
count = count or #arr
local r = {}
local r = {}