October 17, 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
1 2
Next ›   Last »