closures + struct: Error: forward reference to inferred return type of function call
ddcovery
antoniocabreraperez at gmail.com
Mon Dec 14 12:22:26 UTC 2020
In this example, I try to use D Voldemore (fantastic)
functionallity to implement a pattern usually used in javascript.
Basically, a function closure represents the state, and the
methods to access this state are returned in the form of union
(union has not state itself).
void main(){
assert(number(10).next.value==11 );
assert(zero()==number(0) );
assert(zero()==number(1).previous );
auto ten = number(10);
auto nine = ten.previous;
assert(nine == number(9));
}
auto number(int _value=0){
struct Number {
int value() {
return _value;
};
Number next() {
return number(_value+1);
};
Number previous(){
return number(_value-1);
};
int opCmp(Number other){
return _value - other.value;
};
}
return Number();
}
auto zero() {
return number(0);
}
Problem is that Union methods needs to call it's containing
function and compiler doesn't accept it:
main.d(16): Error: forward reference to inferred return type of
function call number(_value + 1)
main.d(19): Error: forward reference to inferred return type of
function call number(_value - 1)
I know there is another ways to solve this problem easily
(without closures), but I was really curious about if it was
possible.
More information about the Digitalmars-d-learn
mailing list