On Thursday, 15 May 2014 at 02:07:40 UTC, Meta wrote:
On Thursday, 15 May 2014 at 01:49:17 UTC, Idan Arye wrote:
UFCS only apply to the method call style, not the the function call style, so it's not a matter of priority here - `foo(myObject)` will not call the `foo.myObject()` method even if there is no `foo` function(in that case it'll just fail).

Having the function call style always defer to a member function is a really bad idea - and not just because of code breakage. It'll make it impossible to call a function on an object that has a method of the same name unless you use an alias or a function variable to copy the function - but then you have to make sure the alias\variable name is also not taken!

This will be a disaster for anyone who wants to build or use a D library that uses templates. Well, how common can that case be?

That's exactly what the proposed @hijackable annotation on a function would do, if I understand it correctly.

Right. The idea though is not to "customize the behavior" of the algorithm, but rather "provide a more efficient implementation". It shouldn't really break any existing code.

In any case, it should not cause any more than the breakage that using UFCS *already* causes... this would just (opt-in by the implementation) make sure you get the same behavior with/without UFCS.

FYI, there are already a few functions in phobos that delegate to member functions "if they exist", and do something generic if they don't. "Take" and "put" are some of the more trivial examples. "move" will also delegate to "proxyMove". At one point, there were also talks of doing the same for popFrontN too.

The issue though is that it's all very hackish, and it makes the implementation jump through hoops to achieve said result, and it only works if the implementation pre-emptivelly thought about doing so.

Reply via email to