Что не так с функцией message??

Страницы: 1
RSS
Что не так с функцией message??, проблемы с вызовом message из глобальной таблицы
 
Что не так с вызовом функции message через глобальную таблицу ?
Код
isRun = true

function main()
  msg   = _G.message
  iscon = _G.isConnected
  while(isRun) do
    msg (_G,"msg test: "..iscon(_G))
    message("message test: "..iscon(_G))
    sleep(1000)
  end
end

function OnStop()
  isRun = false
end

в версии quik 7.19.0.51

при запуске такого скрипта, в сообщения будет попадать только
message test: 0

а вот вывода msg test: 0 не происходит.

это особенности функции message ? что её нельзя скопировать в другую переменную?
каждый раз что-то новое.. прям.....
 
А зачем _G передавать первым аргументом?
 
Цитата
Enfernuz написал:
А зачем _G передавать первым аргументом?

Это уже вопрос десятый. Мне просто интересно, почему все функции ведут себя ожидаемо работают, а эта глючит. У меня dll ка падает из за этого глюка))))
 
Цитата
Павел Валин написал:
Это уже вопрос десятый. Мне просто интересно, почему все функции ведут себя ожидаемо работают, а эта глючит. У меня dll ка падает из за этого глюка))))
Разве она работает не ожидаемо?) 1й параметр - строка, а вы туда таблицу передаете.

и в isConnected тоже. Ненадо так делать) 2я функция не не падает потому что без параметров вызывается и просто игнорит то что вы ей там передаете.
Код
msg("msg test: "..iscon())
и все... копирование вообще не при делах.
 
Антон, согласен
недосмотр. путаница вышла при создании врапера для CreateDataSource
Код
isRun = true

function main()
  ds,err=CreateDataSource("SPBFUT","RIU8",INTERVAL_M1)
  sz = ds.Size
  while(isRun) do
    message("message test: "..sz(ds)) -- отрабатываем
    message("message test: "..sz()) -- тут падаем))))
    sleep(1000)
  end
  ds:Close()
end

function OnStop()
  isRun = false
end
пришлось оборачивать весь глобальный контекст в отдельный класс.
Код
LMain.message("isConnected: " + LMain.isConnected()+ ", DataSource Size: " + ds.Size() + " CLOSE Last candle" + ds.C(ds.Size()));
"isConnected: 0, DataSource Size: 9326 CLOSE Last candle 108490"
 
Цитата
Павел Валин написал:
message("message test: "..sz(ds)) -- отрабатываем
message("message test: "..sz()) -- тут падаем))))
Ну там у вас строки команд отличаются - во втором случае не передается нужный параметр.
 
Цитата
Constantin написал:
Цитата
Павел Валин   написал:
message("message test: "..sz(ds)) -- отрабатываем
message("message test: "..sz()) -- тут падаем))))
Ну там у вас строки команд отличаются - во втором случае не передается нужный параметр.
да не. я тупанул сам.
просто есть функции которые получают первым параметром свою же таблицу.
ds.Size(ds) == ds:Size()

а есть которым не нужна ссылка на self.
типа math.abs(x)
т.е. если описывать работу с DataSource, то вызов всех функций в возвращаемой таблице происходит как DSTable.Size(DSTable), DSTable.C(DSTable,Index) == DSTable:C(Index)
и определить, какие функции требуют self в качестве первого аргумента, а какие нет невозможно. я пока не понял как это сделать ((
Страницы: 1
Читают тему
Наверх