Блог им. _sk_
--
-- Выполнение действий с массивами.
--
local pairs = pairs
local type = type
module(...)
--- Создать копию массива (таблицы)
-- @return копию массива (таблицы)
function copy(array)
local copy_array = {}
if type(array) ~= "table" then
return array
end
for k, v in pairs(array) do
if type(v) == "table" then
copy_array[k] = copy(v)
else
copy_array[k] = v
end
end
return copy_array
end
--- Узнать, начинается ли индексация в массиве с нуля или с единицы.
-- @return 0 или 1
function base(array)
if array[0] ~= nil then
return 0
else
return 1
end
end
--- Вычислить число элементов в массиве.
-- @return число элементов в массиве
function size(array)
local n = 0
for _, _ in pairs(array) do
n = n + 1
end
return n
end
--- Проверить пустой или нет массив.
-- @return true/false
function isEmpty(array)
for _, _ in pairs(array) do
return false
end
return true
end
--- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1.
-- @return первый индекс массива, где ничего не записано
function firstEmptyIndex(array)
local i = 1
while array[i] ~= nil do
i = i + 1
end
return i
end --
-- Выполнение действий с массивами.
--
local Arrays = {}
--- Создать копию массива (таблицы)
-- @return копия массива (таблицы)
local function copy(array)
local copy_array = {}
if type(array) ~= "table" then
return array
end
for k, v in pairs(array) do
if type(v) == "table" then
copy_array[k] = copy(v)
else
copy_array[k] = v
end
end
return copy_array
end
Arrays.copy = copy
--- Узнать, начинается ли индексация в массиве с нуля или с единицы.
-- @return 0 или 1
local function base(array)
if array[0] ~= nil then
return 0
else
return 1
end
end
Arrays.base = base
--- Вычислить число элементов в массиве.
-- @return число элементов в массиве
local function size(array)
local n = 0
for _, _ in pairs(array) do
n = n + 1
end
return n
end
Arrays.size = size
--- Проверить пустой или нет массив.
-- @return true/false
local function isEmpty(array)
return next(array) == nil
end
Arrays.isEmpty = isEmpty
--- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1.
-- @return первый индекс массива, где ничего не записано
local function firstEmptyIndex(array)
local i = 1
while array[i] ~= nil do
i = i + 1
end
return i
end
Arrays.firstEmptyIndex = firstEmptyIndex
return ArraysВторое важное изменение касается целочисленной арифметики. В Lua 5.3 есть 2 типа чисел: integer и float. Для первых реализована целочисленная арифметика, вторые нужны для представления вещественных чисел. Можно считать, что в Lua 5.1 были только float-числа. Номера заявок и сделок теперь будут представляться типом integer, и там хватит места для 19-значных чисел.local tointeger = math.tointeger or (function(x) return x end)
--- Сделать вещественное число целым, если это возможно.
-- @param x вещественное число
-- @return целое число или исходное вещественное число, если преобразование невозможно
function tryInt(x)
return tointeger(x) or x
endТеперь ищем все места, где заполняется таблица с параметрами транзакции для постановки заявки, и там вместо обычного QUANTITY = tostring(выражение),пишем
QUANTITY = tostring(tryInt(выражение)),В принципе, этого должно быть достаточно для правильной работы скриптов.
Вроде, поместили функции в массив, и пользуйся на здоровье.
local Arrays = require(«util.Arrays»)
как у Вас терминал 8.5.2 не падал? у меня дак рекорд 7 дней и сегодня упал без дампа( но стал заметно стабильнее чем 8.5.1 тот совсем только два дня держался
А вот для целых чисел применение math.floor бессмысленно!
Отрицательное число это округлит до ближайшего меньшего целого.
www.lua.org/manual/5.3/
> = math.modf (-1.2345)
-1 -0.2345
local tostring__ = tostring
Function tostring(x)
If math.tointeger(x) then
Return string.format("%0i",x)
End
Return tostring__(x)
End
Ну и размер массива можно вычислить встроенной функцией, а не пользовательской. Функция появилась в 5.3 в пространстве table
Также там есть теперь и table.copy… Одним словом, выкинуть можно весь этот модуль полностью)))))
что-то у меня скомпиленный индикатор не хочет запускать
даже после перекомпиляции под lua 5.3.5
а без компиляции норм
upd: разобрался, надо использовать x64 luac, а я случайно собрал x86 luac из исходников