1

Can you do something like this?

struct Person { hp: i32 } struct EvolvedPerson { hp: i32, evolved_stat: i32, } let p1 = Person { hp: 10 } let p2 = EvolvedPerson { ..p1, extra_stat: 20 } 

Where the p2 now has the hp of p1.

0

3 Answers 3

4

As a possible solution you can deconstruct p1 and then provide variables to p2 by shorter syntax:

struct Person { hp: i32 } struct EvolvedPerson { hp: i32, evolved_stat: i32, } let p1 = Person { hp: 10 }; let p2 = { let Person { hp } = p1; EvolvedPerson { hp, extra_stat: 20 } }; 
Sign up to request clarification or add additional context in comments.

Comments

4

The idiomatic way would be to include the Person struct instead:

struct Person { hp: i32, } struct EvolvedPerson { person: Person, evolved_stat: i32, } let p1 = Person { hp: 10 } let p2 = EvolvedPerson { person: p1, extra_stat: 20 } 

That way it is also trivial to implement AsRef<Person> for EvolvedPerson and thus you can use Person methods with EvolvedPerson too.

Comments

2

Can you do something like this?

No. You can only unpack structs of the same type.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.