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