WoW:API getglobal: Difference between revisions

From AddOn Studio
Jump to navigation Jump to search
m (Move page script moved page API getglobal to API getglobal without leaving a redirect)
 
(4 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{wowapi}}  
{{wowapi}}  
''Note: getglobal and [[API_setglobal|setglobal]] are deprecated and replaced with _G[]<ref>http://forums.worldofwarcraft.com/thread.html?topicId=25626580975&sid=1</ref>. Change all references of getglobal and setglobal:''
  var = getglobal(varName)        --getglobal deprecated
  var = _G[varName]              --new syntax to get a global
  setglobal(otherName, otherVar)  --setglobal deprecated
  _G[otherName] = otherVar        --new syntax to set a global
== Description ==
Get a global variable, from a string.
Get a global variable, from a string.
  local targetGlobal = getglobal("globalName")
  local targetGlobal = getglobal("globalName")


== Parameters ==
== Arguments ==
 
=== Arguments ===
:("globalName")
:("globalName")


:;globalName : String - Name of the global you want to get.
:;globalName : String - Name of the global you want to get.


=== Returns ===
== Returns ==
:;The object from the given string, or nil if not found
:;The value from the given string, or nil if not found


== Details ==
== Details ==
Line 18: Line 26:
  local curFrame = getglobal("myFrame"..i)
  local curFrame = getglobal("myFrame"..i)


As of the introduction of [[API getfenv|getfenv]]() into the API, setglobal() and [[API getglobal|getglobal]]() are somewhat superfluous. You can always do something along the lines of:
As of the introduction of [[API getfenv|getfenv]]() into the API (as well as direct access to the table _G as a global), setglobal() and [[API getglobal|getglobal]]() are somewhat superfluous. You can always do something along the lines of:
   local _G = getfenv()
   local _G = getfenv()
   local prevval = _G["MyVariable"]  ''-- "getglobal()"''
   local prevval = _G["MyVariable"]  ''-- "getglobal()"''
   _G["MyVariable"] = 1234            ''-- "setglobal()"''
   _G["MyVariable"] = 1234            ''-- "setglobal()"''
Function calls always cost some overhead, so if a large number of getglobal calls are being made, the getfenv table will be a faster route.  Note that for few or infrequent calls the performance gain of this method is negligible.
Function calls always cost some overhead, so if a large number of getglobal calls are being made, the global table will be a faster route.  Note that for few or infrequent calls the performance gain of this method is negligible (but given the lack of any loss of functionality, recommended).
:''<code>getglobal()</code> does a little more than <code>_G[globalName]</code>. It also finds <code>_G[anything][globalName]</code> or <code>_G[anything][deeper][globalName]</code> or any deeper hidden child object.''
 
''Note:'' Accessing the global table through the function getfenv() was common within addons presumably because the global '[[Dump_G|_G]]' (the direct global table) was hidden from the WoW environment. It seems to have since been uncovered, and now calling it directly for global access is possible:
  local _G = _G  -- a local speeds up access to [[Dump_G|_G]] slightly. negligible for infrequent calls.
  local prevval = _G["MyVariable"]   ''-- "getglobal()"''
  _G["MyVariable"] = 1234            ''-- "setglobal()"''

Latest revision as of 04:45, 15 August 2023

WoW API < getglobal

Note: getglobal and setglobal are deprecated and replaced with _G[][1]. Change all references of getglobal and setglobal:

 var = getglobal(varName)        --getglobal deprecated
 var = _G[varName]               --new syntax to get a global
 setglobal(otherName, otherVar)  --setglobal deprecated
 _G[otherName] = otherVar        --new syntax to set a global

Description[edit]

Get a global variable, from a string.

local targetGlobal = getglobal("globalName")

Arguments[edit]

("globalName")
globalName
String - Name of the global you want to get.

Returns[edit]

The value from the given string, or nil if not found

Details[edit]

This function is used to get an object if you generate the name of the object manually in your script:

-- i = some_dynamic_number
local curFrame = getglobal("myFrame"..i)

As of the introduction of getfenv() into the API (as well as direct access to the table _G as a global), setglobal() and getglobal() are somewhat superfluous. You can always do something along the lines of:

 local _G = getfenv()
 local prevval = _G["MyVariable"]   -- "getglobal()"
 _G["MyVariable"] = 1234            -- "setglobal()"

Function calls always cost some overhead, so if a large number of getglobal calls are being made, the global table will be a faster route. Note that for few or infrequent calls the performance gain of this method is negligible (but given the lack of any loss of functionality, recommended).

Note: Accessing the global table through the function getfenv() was common within addons presumably because the global '_G' (the direct global table) was hidden from the WoW environment. It seems to have since been uncovered, and now calling it directly for global access is possible:

 local _G = _G   -- a local speeds up access to _G slightly. negligible for infrequent calls.
 local prevval = _G["MyVariable"]   -- "getglobal()"
 _G["MyVariable"] = 1234            -- "setglobal()"