Make alias parameter optional?

Robert Rouse robert.e.rouse at gmail.com
Sat Feb 25 17:04:04 PST 2012


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.



More information about the Digitalmars-d-learn mailing list