ustulation
ustulation

Reputation: 3760

Unable to chain-access tuple types

Given:

struct NameType([u8;64]);
name: (NameType, NameType);

I can do:

let def = &name.0   OR   &name.1

but I cannot do:

let def = &name.0.0   OR   &name.1.0

to access the internals. I have to do it twice:

let abc = &name.0;
let def = &abc.0;

why am I unable to chain it to access inner sub-tuples, tuple-structs etc?

rustc 1.0.0-nightly (ecf8c64e1 2015-03-21) (built 2015-03-22)

Upvotes: 1

Views: 180

Answers (2)

ustulation
ustulation

Reputation: 3760

In addition to above answers, I have also found out that a gap would work wonders :) So;

foo.0. 0  OR  foo.0 . 0 etc all work

is fine. Don't know how much it means but there is a way to chain it if somebody wants to though (without resorting to brackets)

Upvotes: 1

Shepmaster
Shepmaster

Reputation: 430673

As mentioned in the comments, foo.0.0 will be parsed as having a number. This was originally mentioned in the RFC, specifically this:

I'd rather not change the lexer to permit a.0.1. I'd rather just have that be an error and have people write out the names. We could always add it later.

You can certainly file a bug, but as a workaround, use parenthesis:

(foo.0).0

In my opinion, you shouldn't be nesting tuples that deep anyway. I'd highly recommend giving names to fields before you slowly go insane deciding if you wanted foo.0.1.2 or foo.1.2.0.

Upvotes: 1

Related Questions