thisExePath purity
crimaniak via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Sep 19 21:17:21 PDT 2016
Hi and thanks all!
On Tuesday, 20 September 2016 at 00:43:10 UTC, Jonathan M Davis
wrote:
> immutable string executablePath;
>
> shared static this()
> {
> import std.file : thisExePath();
> executablePath = thisExePath();
> }
This code is good for my needs but I start to think about how to
call thisExePath only if it is really used and come to this
solution:
import std.traits: ReturnType, Parameters;
string staticMemoize(alias T, Parms = Parameters!T)() pure
{
struct Holder(alias T)
{
static shared immutable ReturnType!T value;
shared static this(){ value = T(Parms); }
}
return Holder!T.value;
}
unittest
{
import std.file : thisExePath;
assert(staticMemoize!thisExePath == thisExePath);
}
Something like this. Need to refine about input parameters, but I
hope, idea is clear.
Unlike the function memoize from phobos staticMemoize really
pure. And unlike proposed solution with ordinary variable
staticMemoize is lazy, because no call - no instantiation.
https://dlang.org/library/std/functional/memoize.html
More information about the Digitalmars-d-learn
mailing list