Support cleaner usage of bind, by adding a built in _ variable

This commit is contained in:
Jason Turner 2009-06-29 23:00:29 +00:00
parent b3fa6405c5
commit 714e1c0cec
3 changed files with 12 additions and 13 deletions

View File

@ -497,6 +497,8 @@ namespace dispatchkit
s.register_function(boost::function<void ()>(boost::bind(&dump_system, boost::ref(s))), "dump_system");
s.register_function(boost::function<void (Boxed_Value)>(boost::bind(&dump_object, _1)), "dump_object");
s.add_object("_", Placeholder_Object());
s.register_function(boost::shared_ptr<Proxy_Function>(new Dynamic_Proxy_Function(boost::bind(&bind_function, _1))),
"bind");

View File

@ -206,6 +206,10 @@ namespace dispatchkit
boost::shared_ptr<Proxy_Function> m_guard;
};
struct Placeholder_Object
{
};
class Bound_Function : public Proxy_Function
{
public:
@ -244,7 +248,8 @@ namespace dispatchkit
while (true)
{
while (barg != m_args.end() && !barg->is_unknown())
while (barg != m_args.end()
&& !(barg->get_type_info() == Get_Type_Info<Placeholder_Object>::get()))
{
args.push_back(*barg);
++barg;
@ -256,7 +261,8 @@ namespace dispatchkit
++parg;
}
if (barg != m_args.end() && barg->is_unknown())
if (barg != m_args.end()
&& barg->get_type_info() == Get_Type_Info<Placeholder_Object>::get())
{
++barg;
}

View File

@ -1,19 +1,10 @@
//This is a cheater function. The entire point of it is to return a variable
// with an unspecified type.
// The bind function will substitute any unknown object with those passed in
def _()
{
var i;
return i;
}
def add(x, y)
{
return x + y;
}
var b = bind(add, 2, _());
var b = bind(add, 2, _);
var c = bind(b, 3);
print(b(4));
@ -25,7 +16,7 @@ def concat(a,b,c,d)
return to_string(a) + to_string(b) + to_string(c) + to_string(d);
}
var d = bind(concat, _(), " Hello ", _(), " World ");
var d = bind(concat, _, " Hello ", _, " World ");
print(d(1, 3));
//This checks to make sure arity is handled correctly:
//print(d(1, 3, 4));