A member of the BoostLibraries. See http://boost.org/libs/bind/bind.html. The bind library allows one to produce new functions from old functions. For example, given a binary function that multiplies integers together:
int mul(int a, int b) { return a * b; }One could produce a new unary function that multiplies integers by 7:
boost::bind(mul, 7, _1);The _1 is a placeholder for the first argument to the new function. The result of this expression is a FunctorObject that behaves exactly like the unary function, lambda x: 7*x.
A notable area of application is in callbacks. One can use bind to supply context to a function, or more often, to provide an instance to a class member function reference:
class Foo { public: void bar(int xyz) { } }; Foo f; boost::bind(&Foo::bar, f, _1);
How is this done in SmallTalk? If I have a binary block [ :a :b | a * b ], how can I transform it into a unary block by binding one of the arguments?
E.g. what would you have to add as "BlockContext?>>bindFirst" or "BlockContext?>>bindSecond" in order to achieve this? Or is there another way of doing this in SmallTalk?
-- Edouard
I would like to know the answer too. Anyone?
So, would this be sort of like partial-evaluation in a functional language, except with more control?
Doing it the normal way would probably do (can't remember exact syntax);
binBlock := [:a :b| a * b]. unBlock := [:a | binBlock doWith: a and: 12 ]. orBlock := [:b | binBlock doWith: 3 and: b ].-- Tiogshi