Forward referencing functions in D
Ali Çehreli
acehreli at yahoo.com
Sat Oct 17 15:40:58 UTC 2020
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
More information about the Digitalmars-d-learn
mailing list