On 11/15/2012 06:24 AM, Joseph Rushton Wakeling wrote:

> The practical situation I'm dealing with is that the a struct gets built
> inside a function, based on data read from files. Once the data has been
> written to the struct, it should never be changed again.

If you don't want the callers be able to change, then return immutable(Foo). Otherwise, if the caller wants to use the object as immutable, then the user should declare immutable:

a) Don't allow users to modify:

immutable(Foo) makeFoo()
{
    Foo foo;
    foreach (i; 0..10)
        foo.add( /* new data point */ );
    return foo;
}

b) The user wants to play safe:

auto makeFoo()
{
    Foo foo;
    foreach (i; 0..10)
        foo.add( /* new data point */ );
    return foo;
}

void main()
{
    immutable foo = makeFoo();
}

Both of those compile with dmd 2.060.

> I'm deluging the list with a
> bunch of questions

Please continue to do so. That is what this forum is for. Your questions help us all. :)

Ali

Reply via email to