Forward define a function in Lua?

lua local function
lua function
lua call function
lua function return
lua define
lua global functions
lua classes
lua array

How do I call a function that needs to be called from above its creation? I read something about forward declarations, but Google isn't being helpful in this case. What is the correct syntax for this?


Lua is a dynamic language and functions are just a kind of value that can be called with the () operator. So you don't really need to forward declare the function so much as make sure that the variable in scope when you call it is the variable you think it is.

This is not an issue at all for global variables containing functions, since the global environment is the default place to look to resolve a variable name. For local functions, however, you need to make sure the local variable is already in scope at the lexical point where you need to call the value it stores, and also make sure that at run time it is really holding a value that can be called.

For example, here is a pair of mutually recursive local functions:

local a,b
a = function() return b() end
b = function() return a() end

Of course, that is also an example of using tail calls to allow infinite recursion that does nothing, but the point here is the declarations. By declaring the variables with local before either has a function stored in it, those names are known to be local variables in lexical scope of the rest of the example. Then the two functions are stored, each referring to the other variable.

6.2 – Non-Global Functions, Currently, it's possible to forward-declare a local function in Lua like so: local forward_declared_function local function calling_function() Lua - Functions. A function is a group of statements that together perform a task. You can divide up your code into separate functions. How you divide up your code among different functions is up to you, but logically the division usually unique, is so each function performs a specific task.


You can forward declare a function by declaring its name before declaring the actual function body:

local func1
local func2 = function()
  func1()
end
func1 = function()
  --do something
end

However forward declarations are only necessary when declaring functions with local scope. That is generally what you want to do, but Lua also supports a syntax more like C, in which case forward declaration is not necessary:

function func2()
  func1()
end
function func1()
  --do something
end

Local Function Forward Declarations, DEFINE the functions and assign them to their respective -- forward Forward declaration is about using the scoping rules of Lua to your  Currently, it's possible to forward-declare a local function in Lua like so: local forward_declared_function local function calling_function() print "calling function" forward_declared_function() end forward_declared_function = function() print "forward declared function" end This looks kinda ugly, though.


Testing under the embedded lua in Freeswitch, forward declaration does not work:

fmsg("CRIT", "It worked.")
function fmsg(infotype, msg)
   freeswitch.consoleLog(infotype,  msg .. "\n")
end

result:

[ERR] mod_lua.cpp:203 /usr/local/freeswitch/scripts/foo.lua:1: attempt to call global 'fmsg' (a nil value)

Reversing the order does (duh) work.

Functions forward declaration does not work, I forward declared function playMusic before the while loop but I got this error: This is why some people like defining variables and functions at the Lua does not support the use of forward declaration of a function like in C,  A subtle point arises in the definition of recursive local functions. When Lua compiles the call fact (n-1) , in the function body, the local fact is not yet defined. Therefore, that expression calls a global fact , not the local one. Now the fact inside the function refers to the local variable.


6 – More about Functions, In Lua a function is a chunk of code pointed to by a variable. If I use that variable before I set it to the code-chunk, I get an error. Lua allows me to forward declare  Functions are the main mechanism for abstraction of statements and expressions in Lua. Functions can both carry out a specific task (what is sometimes called procedure or subroutine in other languages) or compute and return values.


Doesn't work for me if I try to call the function before definition. I am using this Lua script in nginx conf.

lua entry thread aborted: runtime error: lua_redirect.lua:109: attempt to call global 'throwErrorIfAny' (a nil value)

Code snippet -

...
throwErrorIfAny()
...

function throwErrorIfAny()
    ngx.say("request not allowed")
    ngx.exit(ngx.HTTP_OK)
end

Given some other answers have also pointed out that it didn't work for them either, it is possible that forward declaration of Lua doesn't work with other tools.

PS : It works fine if I put the function definition before and then call it after wards.

Lua - Functions, /usr/bin/lua: ./colnames.lua:3: unexpected symbol near '.' slitt@mydesk:/d/at/lua/​massmail$ Is there a syntax to forward declare both Columns  A Simplified Way to Declare Lua Classes. Out of the box, Lua does not have a class system, but its powerful metaprogramming facilities makes defining classic objects straightforward.


4.2 – Local Variables and Blocks, In Lua, functions are first class values, which means that functions are treated Which means that if you forward declare a variable for your function (that is to  It means that, in Lua, a function is a value with the same rights as conventional values like numbers and strings. Functions can be stored in variables (both global and local) and in tables, can be passed as arguments, and can be returned by other functions.


Why doesn't my forward declaration of a function work?, If you've been using Corona/Lua for any length of time, you've probably The easy way to avoid this kind of error is to declare all your variables at The actual forward reference bug in the library was a little more involved,  Similarly, defining a function in a table using a colon instead of a dot will add a hidden self parameter in the parameter list. Usage of a colon to define the function doesn't mean a colon must also be used to call the function and vice-versa, because these are completely interchangeable. Sorting . Sorting tables in Lua can be relatively trivial.


In Lua what is a forward declared function?, In Lua, variables declared local are only local after this declaration. local later -- Forward declaration, function is defined later local function  Some functions in Lua receive a variable number of arguments. For instance, we have already called print with one, two, and more arguments. Suppose now that we want to redefine print in Lua: Perhaps our system does not have a stdout and so, instead of printing its arguments, print stores them in a global variable, for later use.