attempt to index a nil value

Страницы: 1
RSS
attempt to index a nil value, При переборе циклом for выдвет ошибку attempt to index a nil value
 
При переборе циклом for выдвет ошибку attempt to index a nil value. В чем ошибка функции?
Код
function Count_Contracts_By_Price(price, sell_or_buy_order)
    local qty_opders = 0

    for f = 0, getNumberOf("orders") - 1 do
        local order_info = getItem("orders", f)
        if order_info.sec_code == Emit and order_info.account == MyAccount and CheckBit(order_info.flags, 0) == 1 and (order_info.brokerref == "LimitLevels") then
            if (order_info.price == price) and (CheckBit(order_info.flags, 2) == 1) and (sell_or_buy_order == "Sell") then
                qty_opders = qty_opders + order_info.qty
            elseif (order_info.price == price) and (CheckBit(order_info.flags, 2) ~= 1) and (sell_or_buy_order == "Buy") then
                qty_opders = qty_opders + order_info.qty
            end
        end
    end
    return qty_opders
end

 
А ошибка в строке
local order_info = getItem("orders", f) ?
Такое впечатление, что во время работы цикла колич. ордеров уменьшается.
Проверяйте ордера на ниль и выведите на печать число ордеров и номер ордера, который ниль.
 
Вы строку с ошибкой не указали.
где-то у вас индекс  не определен.
поставьте вывод сообщения с параметрами цикла
 
Единственная строка, на которой интерпретатор может тут выдать такую ошибку, это та, что начинается с "if order_info.sec_code", и единственная причина может быть в том, что order_info было nil т.к. getItem("orders", f) вернул nil. А вернуть он nil мог потому, что в другом потоке таблица orders поменялась. Потокобезопасно таблицы можно обходить с помощью SearchItems.
 
Спасибо, SearchItems сработал. Ошибка больше не возникает!
 
Цитата
funduk написал:
if order_info.sec_code == Emit and order_info.account == MyAccount and CheckBit(order_info.flags, 0) == 1 and (order_info.brokerref == "LimitLevels") then
если в операторе
if order_info.sec_code == Emit and order_info.account == MyAccount and CheckBit(order_info.flags, 0) == 1 and (order_info.brokerref == "LimitLevels") then
то надо просто добавить первым в него  order_info
Код
if order_info and ....
  Про поток, если Вы про main, то  это лишь гипотеза, т к функции QLua в общем стейте и потокобезопасные.
А если про какой-то другой, то это глюк квика.
Страницы: 1
Читают тему
Наверх