On Fri, 04 May 2012 12:32:39 -0400, Jakob Ovrum <jakobov...@gmail.com>
wrote:
On Friday, 4 May 2012 at 15:47:31 UTC, Steven Schveighoffer wrote:
I think the use case is, instead of defining some transformation
function X as a member of a container, you:
1. define X as a function that accepts a range and returns a range
2. define a way to obtain a range of all elements from a container
3. define a way to construct a new container from a range.
Then you only have to define X once, instead of on every container
type. And you can specialize some containers for X because of UFCS.
See Jacob's example.
After a quick look over the thread again, I still don't see any real
examples of use cases from Jacob (I admit I could still be missing it...
somewhere...).
This one:
Collection c = new Collection();
c = c.filter!(x => x < 3).toCollection();
filter isn't a property of c, it's a range-producing function. So I only
have to define filter once, as a range accepting, range producing
function. And any container type, as long as it can produce a range, can
use this as a pseudo method (via UFCS) to make a filtered copy of itself.
-Steve