Thread overview
Can functions add properties?
Nov 23, 2012
Jun
Nov 23, 2012
Mike Parker
Nov 23, 2012
Rob T
November 23, 2012
I found some codes write

toStringz(myString)

as

mystring.toStringz

So I tested this code myself and it worked.

int pow2(int i)
{
    return i*i;
}
int myint = 5;
int otherint = myint.pow2;
assert(otherint == 25);

I've never seen any documentation about this behaviour. I think it's a good feature, but I'm a bit confused.
November 23, 2012
On Friday, 23 November 2012 at 14:08:05 UTC, Jun wrote:
> I found some codes write
>
> toStringz(myString)
>
> as
>
> mystring.toStringz
>
> So I tested this code myself and it worked.
>
> int pow2(int i)
> {
>     return i*i;
> }
> int myint = 5;
> int otherint = myint.pow2;
> assert(otherint == 25);


FYI, you could even do this:

int otherint = 5.pow2;


>
> I've never seen any documentation about this behaviour. I think it's a good feature, but I'm a bit confused.


It's called Universal Function Call Syntax (UFCS). The compiler essentially rewrites something.function to function(something), unless "something" is a struct or class with a method named "function", in which case it calls the method instead.

November 23, 2012
On Friday, 23 November 2012 at 14:08:05 UTC, Jun wrote:
> I've never seen any documentation about this behaviour. I think it's a good feature, but I'm a bit confused.

More info here
http://www.drdobbs.com/cpp/uniform-function-call-syntax/232700394

UFCS is relatively new and has not been included in the language documentation yet. It was added to the language only a few months ago with the dmd 2.059 release.

IMO it should be in the docs by now, and I think that's a problem area being worked (I hope).

--rt