Thread overview
having problem with `std.algorithm.each`
Nov 30, 2015
ref2401
Nov 30, 2015
ref2401
Nov 30, 2015
visitor
Nov 30, 2015
anonymous
Nov 30, 2015
visitor
Nov 30, 2015
ref2401
November 30, 2015
It seems like `std.algorithm.each` is not executed in the example below.
Could anyone tell why?
Thank you.


import std.algorithm;

void main(string[] args) {
	int[] arr = [1, 2, 3, 4, 5];

	arr.each!((ref e) => {
		writeln(e); // does not print
		++e;
	})();

	writeln(arr); // prints [1, 2, 3, 4, 5]
}
November 30, 2015
DMD 2.069.1
OS Win8.1 Enterprise
November 30, 2015
On Monday, 30 November 2015 at 09:56:08 UTC, ref2401 wrote:
> DMD 2.069.1
> OS Win8.1 Enterprise

in a multiline statement, i believe you must use :
arr.each!((ref e) {
    writeln(e);
    ++e;
})
"=>" is for oneliner

though i don"t understand why it fails silently ??
November 30, 2015
On 30.11.2015 11:50, visitor wrote:
> though i don"t understand why it fails silently ??

ref2491's original code is valid, but doesn't have the intended meaning. `e => {foo(e);}` is the same as `(e) {return () {foo(e);};}`, i.e. a (unary) function that returns a (nullary) delegate. Calling it does not run foo. In contrast, calling this runs foo: `e => foo(e)`.
November 30, 2015
On Monday, 30 November 2015 at 12:03:08 UTC, anonymous wrote:
> On 30.11.2015 11:50, visitor wrote:
>> though i don"t understand why it fails silently ??
>
> ref2491's original code is valid, but doesn't have the intended meaning. `e => {foo(e);}` is the same as `(e) {return () {foo(e);};}`, i.e. a (unary) function that returns a (nullary) delegate. Calling it does not run foo. In contrast, calling this runs foo: `e => foo(e)`.

> `e => {foo(e);}` is the same as `(e) {return () {foo(e);};}`

Ok, Thanks ! :-)
November 30, 2015
On Monday, 30 November 2015 at 12:03:08 UTC, anonymous wrote:
> On 30.11.2015 11:50, visitor wrote:
>> though i don"t understand why it fails silently ??
>
> ref2491's original code is valid, but doesn't have the intended meaning. `e => {foo(e);}` is the same as `(e) {return () {foo(e);};}`, i.e. a (unary) function that returns a (nullary) delegate. Calling it does not run foo. In contrast, calling this runs foo: `e => foo(e)`.

Got it. Thank you)