Two questions about assignments

Kenji Hara k.hara.pg at gmail.com
Mon May 27 18:37:55 PDT 2013


On Tuesday, 28 May 2013 at 00:29:04 UTC, bearophile wrote:
>> std.typecons.Tuple supports "structural assignment" before the 
>> change.
>> The code also works with 2.062.
>
> I know it's not a regression. But you say:
> "Named-field tuple should be a subtype of unnamed-field tuple."
>
> You can have sub-typing, or you can have structural typing, but 
> mixing the two "silently" seems a mess.
>
> Also in your test cases of that commit fdcaba7226c... there is:
>
> +    Tuple!(int, int)[] arr;
> +    arr ~= tuple(10, 20); // OK
> +    arr ~= Tuple!(int, "x", int, "y")(10, 20); // NG -> OK
>
> If I try to do the opposite, that is to append a tuple(10, 20) 
> to an array of tuples with named fields, I get an error:
>
> import std.typecons;
> void main() {
>     Tuple!(int, "x", int, "y")[] arr;
>     arr ~= tuple(10, 20); // Error.
> }
>
>
> So here there is a true sub-typing. So sometimes tuples with 
> named fields are sub-types and in other situations they act in 
> a structural typing way. I think this mix of behaviours is a 
> little confusing.

Basically Tuple would follow structural typing. Even if it is 
impossible, it would follow true subtyping right now. That's the 
purpose of my change.

Kenji Hara


More information about the Digitalmars-d-learn mailing list