3 ms·
For anyone else who's confused how this presents an alternative to the builder pattern in the post: Rust's std::default::Default trait can be implemented for an
by tomsmeding 8y ago
For anyone else who's confused how this presents an alternative to the builder pattern in the post: Rust's std::default::Default trait can be implemented for any struct (also automatically derived if you just want the members' standard default values), and then an instance of the struct can be created with the following syntax: [1]
let instance = YourStruct { foo: 42, ..Default::default() };
where 'foo', and possibly more fields, are the ones you want to override from the default. The rest gets taken from the Default trait specialisation.
Tangential: in Haskell, record types allow a similar sort of trick. If you have a data type like the following:
data D = MakeD { a :: Int, b :: Float }
and have a instance of that data type with your default values:
defaultD = MakeD { a = 42, b = 3.14 }
then you can create another instance of D by selectively overriding stuff from the already existing instance using similar syntax:
someInstance = defaultD { a = 100 }
which is equal to MakeD { a = 100, b = 3.14 }.
[1]: adapted from https://doc.rust-lang.org/std/default/trait.Default.html https://doc.rust-lang.org/std/default/trait.Default.html