On 2018-02-28 18:09:41 +0000, H. S. Teoh said:

Basically, the `alias f` is a catch-all template parameter that can
bind to basically anything that has a symbol. It's typically used to
bind to functions, delegates, and lambdas.

Aha... ok that makes it a bit more clear. So, if I have:

auto myFunc(alias f1, alias f2, alias f3, A)(auto ref A _a){...

I can use it like:

a.myFunc(
        (myType) {...myCode...},
        (myType) {...myCode...},
        (myType) {...myCode...}
);

and the aliases just continue to collect whatever comes inside the parameter specification. Does this idea hold? And it will give an error if there are to few/many aliases/parameters?

Technically, the function is missing a sig constraint

How would that look like?

that verifies thatf is in fact a unary function. So it will fail to compile if you pass
something other than a unary function in.

Ok, that's clearn.

This function can be called with code like this:

a.do((myType) {...myCode...});

Are you sure the function name is 'do'? Because that's a keyword, and I
don't think it's a valid identifier.

Well, it's just a bad picked word for my pseudo-code example... sorry.

do(a, (myType) {...myCode...});

Are you sure this actually works?  Is there another overload that takes
a different parameter?  The overload with `alias f`, AFAIK, can only be
called with a compile-time parameter, like this:

        foo!((myType) { ... })(a);

        // or:
        a.foo!((myType) { ... });

I'm trying to better understand the D reactive framework rx: https://github.com/lempiji/rx

This is the real code:

osStream().filter!(wm => wm.message == WM_CREATE).doSubscribe((winMsg wm) {appInit();}); doSubscribe(osStream().filter!(wm => wm.message == WM_CREATE), (winMsg wm) {appInit();});


What's wondering me here is that the template function only has one
paraemter (_a) but I somehow can get my myCode into it. But the code
looks like a parameter to me. So why isn't it like:

auto do(alias f, A)(auto ref A _a, ??? myCode){...

I'm a bit confused.
[...]

Are you sure there isn't an overload that takes a second parameter?
Doesn't look like this will compile, given the above declaration.

To be honste I'm not sure, I try to understand the code. It's the rx.oberservable file.

Thanks a lot so far.

--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster

Reply via email to