What is :-) ?
Antonio
antoniocabreraperez at gmail.com
Tue Nov 21 14:41:52 UTC 2023
On Monday, 20 November 2023 at 16:32:22 UTC, evilrat wrote:
>
> ```d
> // this is a function returning a delegate
> auto createCounter(int nextValue) => auto delegate() =>
> nextValue++;
>
Thank you!!!.
Compiler forces me to omit "auto" keyword
```d
auto createCounter(int nextValue) => delegate () => nextValue++ ;
```
Explicit return must be specified after "delegate" keyword
```d
auto createCounter(int nextValue) => delegate int () =>
nextValue++ ;
```
When declaring a type (variable or parameter) is when keywords
order must be "inverted"
```d
import std.stdio;
int callWith10( int delegate (int) x) =>x(10);
void main(){
int j=100;
// Explicit
writeln( callWith10( delegate int (int i)=>i+j ) );
// Inferred
writeln( callWith10( i=>i+j ) );
// OMG
writeln( ( i=>i+j ).callWith10 );
}
```
> // this is a function returning a function
> auto createCounter(int nextValue) => auto function() =>
> nextValue++;
> ```
I think this will not work, because nextValue is defined out of
the returned function scope: you must return a closure
(delegate).
Thanks a lot evilrat!!!
**From your answer (and other ones too) I have to say that...**
* **D Closures rocks!!!** It is hard to find something so
powerful in other natively compiled languages: **Heap + GC** has
it's advantages.
* **D offers nice syntax features**: you can declare arrow
methods very similar to dart, or assign an arrow
function/delegate to a variable like Javascript/Typescript
lambdas.
More information about the Digitalmars-d-learn
mailing list