October 17, 2020 Re: Forward referencing functions in D | ||||
---|---|---|---|---|
| ||||
Posted in reply to NonNull | On 10/17/20 8:28 AM, NonNull wrote:
> On Friday, 16 October 2020 at 21:28:18 UTC, Steven Schveighoffer wrote:
>> Inner functions have benefits:
>>
>> 1. They are only accessible inside the function. Which means you only have to worry about correctness while INSIDE that function.
>> 2. inner functions have access to the outer function's stack frame.
>>
>> Often, I use inner functions to factor out a common piece of code that I don't want to have to write multiple times in the same function.
>>
>> -Steve
>
> How can you write two inner functions that call each other? (Recursively)
I thought of the following method just now. Yes, there are lambdas but who cares? :) (Besides, 'a' can be defined as a proper function below.)
import std.range;
void foo(string s) {
// b is not initialized yet
void delegate() b;
// a is initialized
auto a = {
while (!s.empty) {
s.popFront();
b();
}
};
// Set b to a lambda
b = {
while (!s.empty) {
s.popBack();
a();
}
};
a();
}
void main() {
foo("hello");
}
Ali
|
Copyright © 1999-2021 by the D Language Foundation