WoW:USERAPI GetReturnValues: Difference between revisions

From AddOn Studio
Jump to navigation Jump to search
mNo edit summary
m (→‎Code: Still inefficient, but not as bad.)
Line 42: Line 42:


  function {{PAGENAME}}(order, ...)
  function {{PAGENAME}}(order, ...)
    local input = {...}
     local output = {}
     local output = {}
     order = tostring(order);
     order = tostring(order)
     for i=1, strlen(order) do
     for i=1, strlen(order) do
         local key = tonumber(strsub(order, i, i));
         local value = select(tonumber(strsub(order, i, i), ...)
         if input[key] ~= nil then
         if value ~= nil then
             table.insert(output, input[key]);
             table.insert(output, value)
         end
         end
     end
     end
     return unpack(output);
     return unpack(output)
  end
  end
Variant
Variant
local {{PAGENAME}}_In;
  local {{PAGENAME}}_Out
  local {{PAGENAME}}_Out;
  function {{PAGENAME}}(order, ...)
  function {{PAGENAME}}(order, ...)
    {{PAGENAME}}_In = {...}
     {{PAGENAME}}_Out = {}
     {{PAGENAME}}_Out = {}
     order = tostring(order);
     order = tostring(order)
     for i=1, strlen(order) do
     for i=1, strlen(order) do
         local key = tonumber(strsub(order, i, i));
         local value = select(tonumber(strsub(order, i, i)), ...)
         if {{PAGENAME}}_In[key] ~= nil then
         if value ~= nil then
             table.insert({{PAGENAME}}_Out, {{PAGENAME}}_In[key]);
             table.insert({{PAGENAME}}_Out, value)
         end
         end
     end
     end
     return unpack({{PAGENAME}}_Out);
     return unpack({{PAGENAME}}_Out)
  end
  end


__NOTOC__
__NOTOC__
[[Category:User Defined Functions]]
[[Category:User Defined Functions]]

Revision as of 06:14, 10 January 2008

This page documents a <i>user-defined function</i> that you can copy and paste into your addon. Replace PREFIX with your addon or lib prefix to avoid conflicts between different versions of these functions.

User defined functions

Returns a list of values in whatever order you specify in order and only those you specify in order. Mostly useful for functions that return multiple values.

ret1, ret2, ... retN = USERAPI GetReturnValues(order, functionCall)
  • Note: the efficiency of this approach is questioned. See the discussion page.

Function Parameters

Arguments

(order, functionCall)
order
number or numeric string
e.g. 17 or "17"
functionCall
a function call that returns a list of values.
e.g GetItemInfo(itemLink)

Returns

the number of and order of return values depend on the number specified in order and on the function passed to functionCall

Example:1

local sName, iRarity, sType, iStackCount = USERAPI GetReturnValues(1368, GetItemInfo(16846));
message(sName..","..iRarity..","..sType..","..iStackCount);

Result:1

USERAPI GetReturnValues will return the first, third, sixth, and eighth return values (in that order) from GetItemInfo(16846)
A message box will pop-up with -
Giantstalker's Helmet,4,Armor,1.

Example:2

local reason, name = USERAPI GetReturnValues(61, GetAddOnInfo("Uber Addon"));
if reason then
    _ERRORMESSAGE(name.." didn't load.\nReason code: "..reason..".");
end

Result:2

USERAPI GetReturnValues will return the sixth and first return values (in that order) from GetAddOnInfo("Uber Addon")
A error message box will pop-up with -
Uber Addon didn't load.
Reason code: MISSING

Code

function USERAPI GetReturnValues(order, ...)
    local output = {}
    order = tostring(order)
    for i=1, strlen(order) do
        local value = select(tonumber(strsub(order, i, i), ...)
        if value ~= nil then
            table.insert(output, value)
        end
    end
    return unpack(output)
end

Variant

local USERAPI GetReturnValues_Out
function USERAPI GetReturnValues(order, ...)
    USERAPI GetReturnValues_Out = {}
    order = tostring(order)
    for i=1, strlen(order) do
        local value = select(tonumber(strsub(order, i, i)), ...)
        if value ~= nil then
            table.insert(USERAPI GetReturnValues_Out, value)
        end
    end
    return unpack(USERAPI GetReturnValues_Out)
end