On Tuesday, 15 July 2014 at 15:48:10 UTC, Puming wrote:
wow, that's interesting :-) Is it the idiomatic approach to initiate immutable objects lazily? Or do people use data class with immutable fields and generate a companion builder class at compile time?

There's no real idiomatic approach, I think, because this is somewhat unexplored territory. I'd say constructing the object inside a pure method so it can be implicitly cast to immutable is more typesafe, but if you're storing the immutable reference to the object in a class or struct, it can only be initialized in that class's/struct's constructor. So the following isn't possible:

struct Test
{
        immutable(int*) n;
        
        private int* getPtr() pure
        {
                int* n = new int;
                *n = 42;
                
                return n;
        }
        
        public void initialize() pure
        {
                n = getPtr();
        }
}

void main()
{
        auto t = new Test();
        test.initialize();
}

Reply via email to