Make alias parameter optional?

Ary Manzana ary at esperanto.org.ar
Mon Feb 27 06:57:55 PST 2012


On 2/25/12 10: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:
>>>
>>>
>>> On Saturday, 25 February 2012 at 22:12:55 UTC, Ali Çehreli wrote:
>>>> On 02/25/2012 01:55 PM, Robert Rouse wrote:
>>>>> On Saturday, 25 February 2012 at 18:54:35 UTC, Trass3r wrote:
>>>>>> void foo(T, T2, alias thing = (){})(T a, T2 b)
>>>>>> {
>>>>>> thing();
>>>>>> }
>>>>>>
>>>>>> void bar(){}
>>>>>>
>>>>>> void main()
>>>>>> {
>>>>>> foo!(int,int,bar)(1,2);
>>>>>> foo(1,2);
>>>>>> }
>>>>>
>>>>> Cool. Didn't know you can do that, but I guess it makes sense that it
>>>>> would work that way.
>>>>>
>>>>> The only thing I wish for is if I didn't have to explicitly define
>>>>> what
>>>>> T and T2 were and I could just do
>>>>>
>>>>> foo!(bar)(1,2);
>>>>
>>>> The following works and is news to me. Apparently template parameters
>>>> with default values need not be at the end of the template parameter
>>>> list:
>>>>
>>>> void foo(alias thing = (){}, T, T2)(T a, T2 b)
>>>> {
>>>> thing();
>>>> }
>>>>
>>>> void bar(){}
>>>>
>>>> void main()
>>>> {
>>>> foo!(bar)(1,2);
>>>> }
>>>>
>>>> Ali
>>>
>>> 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.
>

A Ruby block is much more than a delegate, because you can assign 
variables outside of the block and even returning from a block returns 
from the function that invokes it. I don't see how D can accomplish that.

Here's some more about it: 
http://yehudakatz.com/2012/01/10/javascript-needs-blocks/


More information about the Digitalmars-d-learn mailing list