Ошибка: attempt to call a nil value (global 'foo')

Страницы: 1
RSS
Ошибка: attempt to call a nil value (global 'foo'), непонятная ошибка в вызове пользовательской функции
 
Где ошибка?

MyVar = foo(1,2)-->attempt to call a nil value (global 'foo')

function foo(a,b)
   return a + b
end
 
В момент вызова foo она еще не определена.
Код в теле скрипта выполняется построчно вниз, определяя контекст.
 
Цитата
Nikolay написал:
В момент вызова foo она еще не определена.
Код в теле скрипта выполняется построчно вниз, определяя контекст.
Благодарю)
 
Nikolay, Как это "в момент вызова foo она еще не определена"? У меня в скрипте первой функцией стоит main, а за ней ещё десятка два, обычно по алфавиту. Всегда все всё прекрасно видят. Да и Квик перед запуском делает что-то вроде компиляции кода.
 
Цитата
Владимир написал:
Nikolay, Как это "в момент вызова foo она еще не определена"? У меня в скрипте первой функцией стоит main, а за ней ещё десятка два, обычно по алфавиту. Всегда все всё прекрасно видят. Да и Квик перед запуском делает что-то вроде компиляции кода.
Это зависит из какой области вызывается выражение

Если вызов переменной (функции) происходит из main() а сама переменная объявлена за пределами main() (например в body() или во внешнем подключенном файле), то ошибки не будет,
тк код внутри main() выполняется после кода из body()

Но если объявление также как и вызов внутри main() то порядок имеет значение - сперва объявление, потом обращение.
 
например, так работает:
function main()
   PrintDbgStr(tostring(foo())) -->1
end

function foo()
   return 1
end

а так - нет:

function main()

   PrintDbgStr(tostring(foo()))-->attempt to call a nil value (global 'foo')

   function foo()
       return 1
   end

end
 
Цитата
Владимир написал:
Nikolay, Как это "в момент вызова foo она еще не определена"? У меня в скрипте первой функцией стоит main, а за ней ещё десятка два, обычно по алфавиту. Всегда все всё прекрасно видят. Да и Квик перед запуском делает что-то вроде компиляции кода.
Функция main - это дополнительный поток для скрипта и вызывается основным потоком квик после того как весь скрипт загружен,  
и все функции в этот момент уже определены.
--------------------------
Учите мат часть.
 
Serge, При чём тут вооще "из какой области вызывается выражение"? Эта дура его НЕ ВИДИТ! Глобальные переменные у меня действительно объявлены до main, но, полагаю, и это не имеет значения (в смысле, НЕ ДОЛЖНО иметь значения). Я не помню, есть ли у меня неинициализированные глобальные переменные (скорее всего, нет), но, полаю, и это не должно иметь никакого значения - здесь переменные глобальные по умолчанию (что есть ещё один идиотизм языка). Я же говорил не о переменных, а о функциях, которые по определению "объявлены за пределами main".

Чо ещё за "body" здесь нарисовалось?  :smile: ЧАВО???!!! Что, ФУНКЦИИ "объявляются внутри main"?! Воистину, программисты вымерли!

nikolz, Лапуль, мне НАСРАТЬ на всю эту клиническую мутоту с потоками, которая вдарила в головожопы создателей этого, с позволения сказать, "языка". Я в своё время потратил две или три недели, чтобы гарантированно перенести все операции именно в поток main (три стека для этого пришлось завести!), и с тех пор горя не знаю. Так В ГРОБУ я видел такую "матчасть" - учите сами! :wink:  
 
Цитата
Владимир написал:
Serge, При чём тут вооще "из какой области вызывается выражение"? Эта дура его НЕ ВИДИТ! Глобальные переменные у меня действительно объявлены до main, но, полагаю, и это не имеет значения (в смысле, НЕ ДОЛЖНО иметь значения). Я не помню, есть ли у меня неинициализированные глобальные переменные (скорее всего, нет), но, полаю, и это не должно иметь никакого значения - здесь переменные глобальные по умолчанию (что есть ещё один идиотизм языка). Я же говорил не о переменных, а о функциях, которые по определению "объявлены за пределами main".

Чо ещё за "body" здесь нарисовалось?  :: ЧАВО???!!! Что, ФУНКЦИИ "объявляются внутри main"?! Воистину, программисты вымерли!

nikolz, Лапуль, мне   НАСРАТЬ на всю эту клиническую мутоту с потоками, которая вдарила в головожопы создателей этого, с позволения сказать, "языка". Я в своё время потратил две или три недели, чтобы гарантированно перенести все операции именно в поток main (три стека для этого пришлось завести!), и с тех пор горя не знаю. Так В ГРОБУ я видел такую "матчасть" - учите сами!  
Вы интересовались откуда взялось "боди" - об этм можно узнать из первых страниц документации по Qlua
https://euvgub.github.io/QLua_QUIK/index.html?page=1
в остальном, увы, не знаю как вам можно помочь...
 
Serge, Да плевать мне, откуда взялось "боди"! Для полноценного программирования на Lua это нафиг не нужно.

А мне помогать не надо - мне помогли давно, в первые месяцы моего пребывания здесь. А теперь мой скрипт давно прекрасно работает и прекрасно зарабатывает. Я уже забыл, когда последний раз искал на свою жопу приключений и потому сроду не видывал диагностики, подобной той, которая вынесена в заголовок.
Страницы: 1
Читают тему
Наверх