I have a global fmat in an abstraction and the main patch, but get the error "cannot globalize 'xxx' (name stays local)"?

From ftm

Q: I have some fmats I want to share between my main patcher and a patch loaded within a poly~ object (located in the main patcher). The fmats are created within some ftm.objects and in the inspector their scope is declared as global.

I close the main patch, I reopen it. Then I get a series of messages: "cannot globalize 'xxx' (name stays local)". Then, of course if I try to trigger any voice from within the poly~, all the fmats supposed to be shared from the main patcher are reported to be undefined.

A: To share fmats you should send their reference to the abstractions, or use the ftm.absargs external to get them from the abstraction arguments.

For being able to test or initialise the abstraction, you could create a variable with ftm.object, initialised to a test object, like [var ((new fmat 3 2) random) | data]. That variable would then be overwritten by the actual fmat reference with an ftm.mess ($data = $1) coming from a receive or an inlet.

Explanation: If an object is in global scope (visible at the colon ':' instead of the pipe '|' in the ftm.object box), each name must be unique, i.e. you can't have a patch containing a global definition open twice. Otherwise, the definition will be forced to local scope.