number value

Страницы: 1
RSS
number value
 
День добрый!
Строка:
if st.n_f[i] > 0 then
st.open_fut[i] = offer_Fut
elseif st.n_f[i] < 0 then
st.open_fut[i] = bid_Fut
end
вызывает ошибку:
attempt to index field 'n_f' (a number value)

В чем закавыка?
 
lergen,
Скорей всего причина в том что элемент st.n_f является числом, а Вы обращаетесь к нему как к таблице.
Для более точного анализа нужна полная версия кода.
 
И даже вот так
if tonumber(st.n_f[i])>tonumber(0) then
st.open_fut[i] = offer_Fut
elseif tonumber(st.n_f[i])<tonumber(0) then
st.open_fut[i] = bid_Fut
end
результат тот же
 
lergen,
Это ничего не меняет.
Вы обращаетесь к элементу как к таблице:
st.n_f[i]
при том что st.n_f является числом

Простой пример, который демонстрирует такую же ошибку
Код
X = 123
y = X[1]


в примере, нельзя обратиться к элементу [1] числа X. т.к. у чисел не бывает "элементов".

а вот если бы X была бы таблицей, то ошибки бы не было.
Код
X = {123}
y = X[1]
 
Ну хорошо. Создаем таблицу:
st=LoadTable(StatePath)
var=LoadTable(varPath)
if st==nil then st={}
st.line = { -20, -10, 10, 20, 30 }
st.chart = { -4, -2, 2, 4, 6 }
st.profit = { 10, 30, 50, 70, 90 }
st.stop = { 100, 200, 300, 400, 500 }
st.open_poz = {};
st.open_fut = {};
st.nh = {};
st.h_r = {};
st.tax = {};
st.n_f = {};
st.state_max = {};
st.state_min = {};
Потом ее иницализирую нолями
local m = #st.line * #st.chart * # st.profit * #st.stop

if #st.tax < m then
for r = #st.tax + 1 ,m - #st.tax do
st.open_poz[r] = 0;
st.open_fut[r] = 0;
st.nh[r] = 0;
st.h_r[r] = 0;
st.tax[r] = 0;
st.n_f[r] = 0;
st.state_max[r] = 0;
st.state_min[r] = 0;
end
end
.......
.......
Потом та строка которая вызывает ошибку.
Что не так?
 
Как уже говорилось:
Цитата
Sergey Gorokhov написал:
Для более точного анализа нужна полная версия кода.

Либо, если не хотите выкладывать весь код, воспроизведите ошибку на более простом коде.
 
Ок. Спасибо за оперативность. Нашел косяк - в одном месте было присваивание st.n_f = ...которое и ломало таблицу.
Страницы: 1
Читают тему
Наверх