One way to define a function is:
local function This(x)
print(x)
end
Another way is:
local This = function(x)
print(x)
end
Is there a difference between the two and is there a performance difference between them?
One way to define a function is:
local function This(x)
print(x)
end
Another way is:
local This = function(x)
print(x)
end
Is there a difference between the two and is there a performance difference between them?
Functions are their own data type, kind of like how strings and tables and so on are their own data type.
The only differences of course would be how they're being used.
Your first example is syntactic sugar (a nicer way to write something else) for
local This
This = function(x)
print(x)
end
This makes This (no pun intended) an upvalue (external local variable) inside the function scope. This also allows for recursion. Your second example would not allow recursion.
Let me use a famous example of recursion
local function fact(num)
if (rawequal(num, 0)) then
return 1; --// 0! = 1
end
return num*fact(num - 1);
end
print(fact(5)); --> 120
But if we wrote it in your second example's format:
local fact = function(num)
if (rawequal(num, 0)) then
return 1; --// 0! = 1
end
return num*fact(num - 1);
end
print(fact(5));
--> attempt to call a nil value (global 'fact')
There is an "attempt to call a nil value" error.
ok this thing is glitched brb don't -1
apparently i can't answer on a ipad with a physical keyboard so here's a link to my explanation https://pastebin.com/jzB1nbm6
what an amazing post
best post ever lets upvote it
lol
This discussion is preserved as it was. New answers, comments, and votes are closed.
1 comment
quick answer: local function a() end is syntax sugar for local a; a = function end. since
ais then defined it can be called recursively.