-
Notifications
You must be signed in to change notification settings - Fork 5
Closed
Labels
Description
The following pseudo code shows how struct update syntax can be used to provide API sugar w/o default arguments:
#[derive(Copy, Clone, Debug, Hash)]
struct NodeDefaults {
flags: i32,
population: i32,
individual: i32,
}
impl Default for NodeDefaults {
fn default() -> Self {
Self {
flags: 0,
population: -1,
individual: -1,
}
}
}
fn add_node_with_defaults(_time: f64, _defaults: NodeDefaults) {}
fn main() {
add_node_with_defaults(0.0, NodeDefaults::default());
let defaults = NodeDefaults {
population: 2,
..Default::default()
};
assert_eq!(defaults.population, 2);
assert_eq!(defaults.individual, -1);
add_node_with_defaults(0.0, defaults);
// Type is Copy, so we can re-use
add_node_with_defaults(0.0, defaults);
let defaults2 = NodeDefaults {
individual: 2,
..defaults
};
assert_eq!(defaults2.population, 2);
assert_eq!(defaults2.individual, 2);
add_node_with_defaults(0.0, defaults2);
}
See this blog post for discussion.