Thread overview | |||||
---|---|---|---|---|---|
|
April 12, 2012 Chaining std.algorithm functions | ||||
---|---|---|---|---|
| ||||
Hi. I was wondering why the following works: filter!(a => a % 2 == 0)(map!(a => a + 1)([1,2,3,4,5])) but the following does not: [1,2,3,4,5] .map!(a => a + 1)() .filter!(a => a % 2 == 0)() ...giving me the error `Error: no property 'filter' for type 'Result'` The dot syntax works fine if I'm just doing one map/filter/etc., though. Is there a better way to do chaining like this? Am I misunderstanding how the dot syntax sugar works or how map/filter/etc work in D? I'd prefer not to use the first style as it can get a bit unwieldy... Thanks for your time! ~DH |
April 12, 2012 Re: Chaining std.algorithm functions | ||||
---|---|---|---|---|
| ||||
Posted in reply to DH | On Thursday, 12 April 2012 at 17:00:37 UTC, DH wrote: > Hi. I was wondering why the following works: > > filter!(a => a % 2 == 0)(map!(a => a + 1)([1,2,3,4,5])) > > but the following does not: > > [1,2,3,4,5] > .map!(a => a + 1)() > .filter!(a => a % 2 == 0)() > > ...giving me the error `Error: no property 'filter' for type 'Result'` > > The dot syntax works fine if I'm just doing one map/filter/etc., though. Is > there a better way to do chaining like this? Am I misunderstanding how the dot > syntax sugar works or how map/filter/etc work in D? I'd prefer not to use the > first style as it can get a bit unwieldy... > > Thanks for your time! > ~DH It works for the first argument because UFCS (that is, calling free functions as members) works for arrays but not for other types (ranges in this case) in DMD <=2.058. Thanks to the intrepid Kenji it works for all types in the upcoming 2.059. You can try out the 2.059 beta here: http://ftp.digitalmars.com/dmd2beta.zip Your second example should work fine in it. Regards, Brad Anderson |
April 12, 2012 Re: Chaining std.algorithm functions | ||||
---|---|---|---|---|
| ||||
Posted in reply to DH | On Thu, Apr 12, 2012 at 07:00:35PM +0200, DH wrote: > Hi. I was wondering why the following works: > > filter!(a => a % 2 == 0)(map!(a => a + 1)([1,2,3,4,5])) > > but the following does not: > > [1,2,3,4,5] > .map!(a => a + 1)() > .filter!(a => a % 2 == 0)() > > ...giving me the error `Error: no property 'filter' for type 'Result'` > > The dot syntax works fine if I'm just doing one map/filter/etc., though. Is there a better way to do chaining like this? Am I misunderstanding how the dot syntax sugar works or how map/filter/etc work in D? I'd prefer not to use the first style as it can get a bit unwieldy... [...] The second syntax requires dmd 2.059, which is currently on beta. Earlier versions of dmd do not support this syntax. T -- Two wrongs don't make a right; but three rights do make a left... |
Copyright © 1999-2021 by the D Language Foundation