On Monday, 7 December 2015 at 00:43:50 UTC, Ali Çehreli wrote:
On 12/06/2015 06:41 AM, Márcio Martins wrote:

> auto m = (a > b) * a + 15;
> auto c = a.choose(a > b)^^2;

What do those operations do? Are you thinking of a special meaning for '>', perhaps common in numerical computations, which I'm not familiar with?

If I understand correctly, 'a > b' in choose(a > b) is the condition to pick elements from a. If so, it is better to pass a lambda in such cases:

  a.choose!((i, j) => i > j);

However, as I understand it, the whole expression is supposed to generate an array-like result. Is that right? :)

Ali

Yes, each expression involving these arrays will almost always also result in another array, sometimes with a different type.

For example, a > b returns an array of bools whose elements are the the result of the condition applied to each individual element of a and b.

This makes writing numerical code very easy, and with fewer bugs, because it's all very succinct and each operation is very simple and well defined.

My initial intuition was that opBinary and opBinaryRight would be used if suitable and opCmp/opEquals would be the fallback. That didn't seem to work, so I quickly realised this is not possible in D. I'm wondering if it is an oversight in the language design or there are real reasons for this limitation?

Reply via email to