How it says "function lightOnFire(part)" at the beginning... I want it the other way of making a function. Ex: script.Parent.Touched:connect(function(part) Something like that..
function lightOnFire(part) print("Going to light this part on fire:") print(part.Name) fire = Instance.new("Fire") fire.Parent = part end firePart = game.Workspace.FirePart firePart.Touched:connect(lightOnFire) function putOutFire(part) print("Got to put out the fire on:") print(part.Name) fire = part:FindFirstChild("Fire") if fire then fire:Destroy() end end waterPart = game.Workspace.WaterPart waterPart.Touched:connect(putOutFire) firePart.Transparency = 1 waterPart.Transparency = 1
Functions are declared in two ways.
One is with named functions:
function name(args) -- stuff end
This declares a name
to be a function.
The other is anonymous functions (so called because they don't have names). You just don't include the name in the defition. It doesn't declare anything, but makes a function value -- it is not a full statement.
Name functions are just
name = function(args) -- stuff end
--they set a variable to an anonymous function.
Thus these two things are the same:
function lightOnFire (part) print("Going to light this part on fire:") print(part.Name) fire = Instance.new("Fire") fire.Parent = part end
lightOnFire = function(part) print("Going to light this part on fire:") print(part.Name) fire = Instance.new("Fire") fire.Parent = part end
Since lightOnFire
is only used in firePart.Touched:connect(lightOnFire)
it's pretty easy to replace lightOnFire
with the anonymous function, based on what lightOnFire
was assigned to:
firePart.Touched:connect(function(part) print("Going to light this part on fire:") print(part.Name) fire = Instance.new("Fire") fire.Parent = part end)
In general it's not a good idea to use anonymous functions for events. It prevents you from using the function elsewhere.
If you wanted to make your fire spread, for instance, that would be a problem.
It also makes the function not have a name, so you lose some of the intent behind connecting it in the first place. When you read your code as it was, it's clear that "when part
touches firePart
, lightOnFire
".
It is a little briefer, so if you're sure the function is not necessary to be called, then go ahead and make it anonymous if you want.1
You're rarely sure. As an example, PlayerAdded events. Even though there's little reason you would need them outside of the actual event, for testing in Solo you have to invoke the function on objects that were already there -- meaning you have to double the function pointlessly, or just give it a name! ↩