WoW:USERAPI GetReturnValues: Difference between revisions

From AddOn Studio
Jump to navigation Jump to search
m (It's new)
 
(Note: efficiency questioned)
Line 5: Line 5:
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.
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 = {{PAGENAME}}(order, functionCall)
  ret1, ret2, ... retN = {{PAGENAME}}(order, functionCall)
* ''Note:'' the efficiency of this approach is questioned. See the [[Talk:{{PAGENAME}}|{{discussiontab}} page]].


== Function Parameters ==
== Function Parameters ==

Revision as of 12:10, 18 July 2007

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

USERAPI GetReturnValues - by Egingell -


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 input = {}
    for i = 1, select('#', ...) do
        input[i] = select(i, ...);
    end
    local output = {}
    order = tostring(order);
    for i=1, strlen(order) do
        local key = tonumber(strsub(order, i, i));
        if input[key] ~= nil then
            table.insert(output, input[key]);
        end
    end
    return unpack(output);
end

Variant

local USERAPI GetReturnValues_In;
local USERAPI GetReturnValues_Out;
function USERAPI GetReturnValues(order, ...)
    USERAPI GetReturnValues_In = {}
    for i = 1, select('#', ...) do
        USERAPI GetReturnValues_In[i] = select(i, ...);
    end
    USERAPI GetReturnValues_Out = {}
    order = tostring(order);
    for i=1, strlen(order) do
        local key = tonumber(strsub(order, i, i));
        if USERAPI GetReturnValues_In[key] ~= nil then
            table.insert(USERAPI GetReturnValues_Out, USERAPI GetReturnValues_In[key]);
        end
    end
    return unpack(USERAPI GetReturnValues_Out);
end