Module:Array: Difference between revisionsGive feedback
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(' | 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. | ||
---@return T | ---@return T | ||
function Array.take_every(arr, n, count | 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, | checkType('Module:Array.take_every', 3, start, 'number', true) | ||
checkType('Module:Array.take_every', 4, | checkType('Module:Array.take_every', 4, count, 'number', true) | ||
count = count or #arr | count = count or #arr | ||
local r = {} | local r = {} | ||