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

Why do i have to sometimes put a ) at end?

Why do i have to sometimes put a ) at end?

2 answers

✓ Accepted answer

Well, there's a difference between end and end). For example, have a while true do function. It will not require a ')' at the end because it is not a function that is uses '()' in general.

while true do
wait(1)
print('Hello world!')
end

But, if we do something like:

script.Parent.Touched:connect(function(hit)
end)

Then, we have a end) because we opened 2 functions and one closed: (hit). We finally close the last function by putting end) at the end of our script.

2 comments

0

Thanks!

0

You put end) at the end of an anonymous function.

wall142 is sorta correct.

When you use end) instead of end, it's because the former is actually the last line of a written-in function. That is, a method (or function) call that takes a function as an argument had that function written into the call, rather than assigned to a variable. These kind of functions are called anonymous functions.

For example, the connect method of ROBLOX events (aka Touched) takes a function as a parameter - the function to be called when the event fires.

function Name(hit)
end

Part.Touched:connect(Name)

Since function Name(hit) is syntactic sugar for Name = function(hit) in Lua, you can put the definition of the function (the actual code) in where the variable that refers to it is placed.

Aka:

Part.Touched:connect(function(hit) end)

Notice, there is a closing parenthesis on this end, and not on the one in my first code block. This parenthesis matches up with the opening parenthesis of the connect method, which has the function argument written in rather than passed in by a variable.

The reason it seems to stand out is because, usually, you have code to run inside the function, and having a lot of code run on a single line is ugly (although perfectly allowable in Lua).

Part.Touched:connect(function(hit)
	hit.Parent.DoSomething.Value = true
	DoSomething(hit)
	--and so on
end)

This works because Lua ignores almost all whitespace when it is interpreting scripts. Technically, all scripts in Lua can be written on a single line, it's just easier to read when it's spread out.

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