Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I send Functions (with private variables) as parameters?

Asked by 8 years ago

Hi I'm trying to do a big project here, and one of the things required is to sucessfully send in a function to be read by another modulescript and executed. This is so I can tie function to an event with more flexibility, allowing me to change the effect of a button when created.

Here's what I have

local GUI = {}
------------------------------------------------------------------------------------------------------
--CONSTRUCTOR--
function GUI.new(PARENT, CLICKEFFECT, CARD)
    ---------------------
    --PRIVATE VARIABLES--
    local name = CARD:getName();
    local card = Instance.new("ImageButton", PARENT)
    local clickEffect = loadstring(CLICKEFFECT);
    local stuff = {}
    ------------------------------------------------------------------------------------------------------
    --SETTINGS--
    card.Size = UDim2.new(.2, 0, .5, 0)
    card.Position = UDim2.new(.2, 0, .25, 0)
    ------------------------------------------------------------------------------------------------------
    --ACCESSOR METHODS--
    function stuff:getScreenPosition() --Returns the UDim2 of the Position
        return card.Position
    end
    ------------------------------------------------------------------------------------------------------
    --MODIFIER METHODS--
    function stuff:moveGUITo(newPosition) --Moves the GUI to newPosition(a UDim2)
        card.Position = newPosition;
    end
    ------------------------------------------------------------------------------------------------------
    --EVENT LISTENERS--
    card.MouseButton1Down:connect(clickEffect)
    ---------------------
    setmetatable(stuff, GUI);
    return stuff
end
------------------------------------------------------------------------------------------------------
--MISC METHODS-
------------------------------------------------------------------------------------------------------
--METAMETHODS--
GUI.__index = GUI --All indexes to this object will be directed to the module's items
------------------------------------------------------------------------------------------------------
return GUI

And I drive it with

local GUI = require(script.Parent.GUI);
...irrevelant code here...
cards[i] = GUI.new(main, "function()print(name)end" , Deck[i])

problem is, when I run, I get the error:

1:11:13.739 - Attempt to connect failed: Passed value is not a function

and when I click it, of course I'll get

11:11:14.652 - attempt to call a nil value

Can anyone help me solve my problem? I'm looking for the most efficient way to do this

Answer this question