Make alias parameter optional?
Jacob Carlborg
doob at me.com
Sun Feb 26 03:45:53 PST 2012
On 2012-02-26 11:03, Ali Çehreli wrote:
> On 02/25/2012 05:04 PM, Robert Rouse wrote:
> > On Saturday, 25 February 2012 at 23:10:51 UTC, Ary Manzana wrote:
> >> On 2/25/12 7:31 PM, Robert Rouse wrote:
>
> ...
>
> >>> This means that D can simulate Ruby blocks more than I thought. That's
> >>> pretty awesome. I'm loving D more every day.
> >>
> >> How's that like a Ruby block?
> >
> > The D code simulates the following Ruby if you were to make bar print
> > "something" with writeln.
> >
> > def foo(a, b, &block)
> > puts "a is #{a}")
> > b.call
> > yield
> > end
> >
> > f = lambda { puts "good bye" }
> >
> > foo(1, f) { puts "something" }
> >
> >
> > That's what I'm talking about.
> >
>
> I don't know Ruby but from what I've read so far about Ruby blocks,
> their D equivalents may also be D ranges.
>
> Ali
A Ruby block is basically like a delegate in D and has nothing to do
with ranges.
Ruby:
def foo (&block)
block.call
end
foo do
p "asd"
end
D:
void foo (void delegate () block)
{
block();
}
void main ()
{
foo({
writeln("asd");
});
foo(() => writeln("asd")); // new lambda syntax
}
Both examples print "asd". If you want to have a more Ruby looking
syntax in D you do some operator overload abuse:
struct Block
{
void delegate (void delegate ()) impl;
void opIn (void delegate () block)
{
impl(block);
}
}
Block foo ()
{
return Block((x) => x());
}
void main ()
{
foo in {
writeln("asd");
};
}
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list