Global Functions: Difference between revisions
>Samacado pre/code change, removed subjective opinions from article - todo: 'shared' article user:legend26? |
m Text replacement - "</SyntaxHighlight>" to "</syntaxhighlight>" |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 5: | Line 5: | ||
Global functions are function accessible in all environments and threads. Global functions must be contained within what is called the global environment which is represented by a table called the global table. _G is the variable that holds the global table. In ROBLOX _G works differently than in normal Lua. In ROBLOX you must index values from the global table if you set them. | Global functions are function accessible in all environments and threads. Global functions must be contained within what is called the global environment which is represented by a table called the global table. _G is the variable that holds the global table. In ROBLOX _G works differently than in normal Lua. In ROBLOX you must index values from the global table if you set them. | ||
{{Example|< | {{Example|<syntaxhighlight lang="lua"> | ||
_G["foo"] = "bar" | _G["foo"] = "bar" | ||
print(_G["foo"]) -- bar | print(_G["foo"]) -- bar | ||
</ | </syntaxhighlight>}} | ||
Any function, and any thread can access the "foo" variable so long as the example code is run before the other thread is executed. | Any function, and any thread can access the "foo" variable so long as the example code is run before the other thread is executed. | ||
Line 15: | Line 15: | ||
Sometime in 2010 it was decided that _G was a security issue. Before this date all threads could read and write to the global table. Instead, a substitute table was put in place of _G. This was a table called "shared". All threads could access the "shared" table, however you must actually index it: | Sometime in 2010 it was decided that _G was a security issue. Before this date all threads could read and write to the global table. Instead, a substitute table was put in place of _G. This was a table called "shared". All threads could access the "shared" table, however you must actually index it: | ||
{{Example|< | {{Example|<syntaxhighlight lang="lua"> | ||
shared["foo"] = "bar" | shared["foo"] = "bar" | ||
print(shared["foo"]) -- bar | print(shared["foo"]) -- bar | ||
</ | </syntaxhighlight>}} | ||
The way _G worked before allowed this: | The way _G worked before allowed this: | ||
{{Example|< | {{Example|<syntaxhighlight lang="lua"> | ||
_G["foo"] = "bar" | _G["foo"] = "bar" | ||
print(foo) -- bar | print(foo) -- bar | ||
</ | </syntaxhighlight>}} | ||
Values within the _G table would be replicated into all the threads environments, not just the _G table itself. | Values within the _G table would be replicated into all the threads environments, not just the _G table itself. | ||
[[Category:Scripting Tutorials]] | [[Category:Scripting Tutorials]] |
Latest revision as of 04:53, 27 April 2023
Introduction
Global functions are function accessible in all environments and threads. Global functions must be contained within what is called the global environment which is represented by a table called the global table. _G is the variable that holds the global table. In ROBLOX _G works differently than in normal Lua. In ROBLOX you must index values from the global table if you set them.
_G["foo"] = "bar"
print(_G["foo"]) -- bar
Any function, and any thread can access the "foo" variable so long as the example code is run before the other thread is executed.
History
Sometime in 2010 it was decided that _G was a security issue. Before this date all threads could read and write to the global table. Instead, a substitute table was put in place of _G. This was a table called "shared". All threads could access the "shared" table, however you must actually index it:
shared["foo"] = "bar"
print(shared["foo"]) -- bar
The way _G worked before allowed this:
_G["foo"] = "bar"
print(foo) -- bar
Values within the _G table would be replicated into all the threads environments, not just the _G table itself.