In the new D release why use free functions instead of properties?
Idan Arye via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Aug 18 17:55:22 PDT 2014
On Tuesday, 19 August 2014 at 00:54:25 UTC, Idan Arye wrote:
> On Monday, 18 August 2014 at 21:17:11 UTC, Jonathan M Davis
> wrote:
>> On Monday, 18 August 2014 at 21:02:09 UTC, Gary Willoughby
>> wrote:
>>> In the new D release there have been some changes regarding
>>> built-in types.
>>>
>>> http://dlang.org/changelog.html?2.066#array_and_aa_changes
>>>
>>> I would like to learn why this has been done like this and
>>> why it is desired to be free functions rather than properties?
>>
>> Probably because they never should have been properties in the
>> first place. Properties are supposed to emulate variables,
>> whereas something like dup is clearly an action. So, it's
>> clearly not supposed to be a property. However, because D
>> doesn't require parens on a function with no arguments, you
>> can still call it without parens. Some of the changes probably
>> also help with cleaning up the AA internals, which is sorely
>> needed.
>>
>> - Jonathan M Davis
>
> Also std.algorithm's heavy usage of passing delegates as
> template arguments makes it more elegant to use free functions:
>
> import std.algorithm;
> import std.compiler;
>
> void main()
> {
> int[][] arr=[[1,2],[3,4]];
> static if (version_minor<=65){
> auto arr2=arr.map!(a => a.dup)();
> }else{
> auto arr2=arr.map!(a.dup)();
> }
> arr2[0][0]=9;
> assert(arr2[0][0] == 1);
> }
Sorry - that should have been:
import std.algorithm;
import std.compiler;
void main()
{
int[][] arr=[[1,2],[3,4]];
static if (version_minor<=65){
auto arr2=arr.map!(a => a.dup)();
}else{
auto arr2=arr.map!(dup)();
}
arr2[0][0]=9;
assert(arr2[0][0] == 1);
}
More information about the Digitalmars-d-learn
mailing list