Таблицы в функции

Страницы: 1
RSS
Таблицы в функции
 
Здравстуйте, имеется таблица:
Код
S                  = 0       
S.POS              = 0               
S.MIDDLE_PRICE     = 0   
 
И некая функция:
Код
function Algo(s, sPos, sMIDDLE_PRICE)


end
Почему, когда я передаю таблицу в качестве параметров функции, функция не работает и выдает сообщение, функция ждет таблицу, а получает строковые данные?
 
А где здесь вызов функции с передачей параметров?
 
Вызываю вот так:
Код
Algo(S, S.Pos, S.MIDDLE_PRICE)
 
Ну так и таблицы не видно
Код
S  = 0

Но если она все же есть, то проверяйте, что нигде она не переопределяется. Работая с глобальными переменными, легко выстрелить себе с ногу.

Код
S = {}............S = 'lalalla'

Все, нет таблицы.
 
У меня еще вопрос, можно ли таблицу передавать в функцию, как переменную? Она в строковое значение не переведится ли? Может у меня из-за этого ошибка? Он же ругается, что ждет таблицу, а получает переменную.

А вот с этим  S = {}............S = 'lalalla' все в порядке
 
Можно, конечно. Только важно помнить, что она передается по ссылке.

Только сигнатура функции должна быть

Код
Algo(S, Pos, MIDDLE_PRICE)

А еще лучше, раз таблица передается, только ее и передать.
Код
local function Algo(S)

local pos = S.POS
local mp = S.MIDDLE_PRICE

end
 
Вы правы, когда делаешь так:
Код
local function Algo(S)

local pos = S.POS
local mp = S.MIDDLE_PRICE

end
то все замечательно работает, но тогда универсальность функции теряется. Мне нужно, чтобы в эту функцию можно было передавать и другие таблицы. А иначе придется эту функцию несколько раз копировать
 
Так и передавайте несколько параметров, кто мешает. Это не Питон, именованных параметров нет.
 
Цитата
Станислав написал:
А иначе придется эту функцию несколько раз копировать
Ее не обязвтельно копировать, достаточно загрузить ее в разные переменные
                       
 
Станислав, Убей, не пойму, что Вам нужно. Передавайте хоть таблицу: Algo(S), хоть её поля: Algo(S.Pos, S.MIDDLE_PRICE) - всё должно работать. Лично у меня вообще одна глобальная "супертаблица", и в функции я передаю только имена полей, которые, к тому же, всегда представлены как числовые индексы. Вот, например, есть у меня такая функция Y(i,j,k,l), она переносит k-ю взятку из массива j-го таймфрейма i-го тикера в массив l-го таймфрейма того же тикера. Передаются тупо 4 числа, а сама таблица a не передаётся - она глобальная. А уже внутри функции эти числа интерпретируются как индексы соответствующих полей этой таблицы. В частности, в лог пишется (точнее, писалось, когда я это дело отлаживал):
F:write(ST().."Перенос "..a[i][0][1].." из "..j.." в "..l.." сделки "..k.." лотов "..a[i][4][j][k].." по "..a[i][4][j][k+1].."\n");
И нет проблем! Универсальность выше крыши - переносится любая взятка любого тикера из любого таймфрейма в любой, передача параметров - проще не придумаешь, надёжность тоже вполне приличная, хотя даже здесь эта антиллехтуальная придурь со своей долбаной динамической типизацией умудряется поднасрать, заменяя натуральные числа вещественными, именно в этой функции мне пришлось вставить первой командой: j=tonumber(string.format("%1.0f",j)); о чём я недавно писал. Зачем искать на свою задницу приключений?
Страницы: 1
Читают тему (гостей: 2)
Наверх