Interested in D, spec confuses me.

anonymous via Digitalmars-d digitalmars-d at puremagic.com
Tue Feb 2 07:48:02 PST 2016


On 02.02.2016 15:36, Bambi wrote:
> The example snippet ' immutable(int[]) bar() immutable {} ' brings back
> bad memories of redundant declarations of the style ' Object object =
> new Object(); '. And homonyms in programming languages seem like a bad
> idea in general.

"immutable" is not a homonym here. It means the same thing ("cannot ever 
change"). And it's not redundant either, as the two instances apply to 
different targets. It's clear what the first "immutable" ties to: It 
qualifies the return type. The second one is less clear: It qualifies 
the type of the object, meaning the method can only be called on an 
immutable object.

Leaving either of them out changes the meaning of the signature:
`int[] bar() immutable {}` - Return type is mutable now.
`immutable(int[]) bar() {}` - Object type is mutable now. I.e., this 
method can be called on a mutable object, and it cannot be called on an 
immutable object.


More information about the Digitalmars-d mailing list