FunctionList multiple function
superclass: AbstractFunction
A FunctionList is a function that composes multiple functions into one. This allows allow to deal transparently with several functions as if they were one and to append new functions at a later point.
See the [Functions] help file for a basic introduction.
*new(functions)
create a new instance. functions is an array of functions or objects
addFunc(function, function ..)
This message is used to be able to add to an Object, to a Function, or to a FunctionList.
nil.addFunc returns a function, if only one function is passed in the argument.
function.addFunc then returns a FunctionList.
removeFunc(function), remove a function from the list.
Object returns nil when appropriate.
// example
a = nil;
a = a.addFunc { |x="", y=""| "this % is an % example\n".postf(x, y); 1 };
a.postln;
a = a.addFunc { |x="", y=""| "there is no % that is %\n".postf(x, y); 2 };
a.value;
a.value("text", "extraordinary well written")
a.valueArray(["x", "y"]);
(
().use {
~x = "array";
~y = "ominous";
a.valueEnvir;
a.valueEnvir("list");
}
)
// removing a function
x = { "removal test".postln };
a.addFunc(x);
a.value;
a = a.removeFunc(x);
a.value;
// mathematics
a = x.addFunc({ 1.0.rand }).addFunc({ [0, 1].choose });
a = a.squared.linexp(0, 1, 1.0, 500);
a.value;
// compatibility with function multichannel expansion
a = nil;
a = a.addFunc { |x=0| if(x > 0) { 7 } { 1000.rand } };
a = a.addFunc { |x=0| if(x < 0) { 17 } { -1000.rand } };
a.value
a = a.flop;
a.value
a.value([-1, 1])
// typical usage (similar in action functions for views)
d = Document.current;
d.keyDownAction = { "You touched the keyboard.".postln };
d.keyDownAction = d.keyDownAction.addFunc {:x, x<-(1..), :: "already % times\n\n".postf(x) };
d.keyDownAction = nil;
// even if you don't know if there is already an action defined
// one can add one.
(
d.keyDownAction = nil;
d.keyDownAction = d.keyDownAction.addFunc {:x, x<-(1..), :: "already % times\n\n".postf(x) };
);
d.keyDownAction = nil;