How can I do lazy variable initialization?
    Ali Çehreli 
    acehreli at yahoo.com
       
    Sat Jan  9 20:35:52 UTC 2021
    
    
  
Explicit with a lambda:
import std;
int heavyLoadOperation() {
   writeln("Expensive!");
   return uniform(0, 10);
}
void main(string[] args) {
   const l = {
     bool inited = false;
     static int i;
     if (!inited) {
       i = heavyLoadOperation();
     }
     return i;
   }();
   if (args.length == 1) {
     writefln!"Using lazy variable: %s %s"(l, l);
   }
}
Getting help from memoize (this one is lovely):
alias lightLoadOperation = memoize!heavyLoadOperation;
   const l = lightLoadOperation();
And of course, the first approach can be wrapped in a type like C#'s 
lazy as well.
Ali
    
    
More information about the Digitalmars-d-learn
mailing list