Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

What's the difference between these two function types?

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?

1 comment

0

quick answer: local function a() end is syntax sugar for local a; a = function end. since a is then defined it can be called recursively.

1 answer

✓ Accepted answer

1. You really don't need to be worrying about "lag and performance." At this point you're misusing these terms.

2. There are no different "types" of functions in Lua.

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.

5 comments

1

ok this thing is glitched brb don't -1

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

1

what an amazing post

1

best post ever lets upvote it

1

lol

This discussion is preserved as it was. New answers, comments, and votes are closed.