Rust 实现默认值和函数重载
默认值实现
默认值只需要实现 Default
trait 即可,如:
fn main() {
let foo1 = Foo::new();
// 默认值
let foo2 = Foo::default();
}
struct Foo {
bar: String,
baz: i32,
foo: bool,
}
impl Default for Foo {
fn default() -> Self {
Self {
bar: Default::default(),
baz: Default::default(),
foo: Default::default(),
}
}
}
impl Foo {
fn new() -> Self {
Default::default()
}
}
函数重载实现
Rust
本身不提供函数重载功能,但是可以通过 Trait
和泛型组合实现,如:
fn main() {
// 函数重载调用
let foo3 = Foo::call(1);
let foo4 = Foo::call(String::from("Rustln"));
let foo5 = Foo::call(true);
}
/// 定义可重载的 Traits
pub trait Overloaded<T> {
fn call(value: T) -> Self;
}
struct Foo {
bar: String,
baz: i32,
foo: bool,
}
impl Default for Foo {
fn default() -> Self {
Self {
bar: Default::default(),
baz: Default::default(),
foo: Default::default(),
}
}
}
impl Foo {
fn new() -> Self {
Default::default()
}
}
/// 为不同的类型参数实现重载,如 String
impl Overloaded<String> for Foo {
fn call(value: String) -> Self {
Foo {
bar: value,
..Default::default()
}
}
}
/// 为不同的类型参数实现重载,如 i32
impl Overloaded<i32> for Foo {
fn call(value: i32) -> Self {
Foo {
baz: value,
..Default::default()
}
}
}
/// 为不同的类型参数实现重载,如 bool
impl Overloaded<bool> for Foo {
fn call(value: bool) -> Self {
Foo {
foo: value,
..Default::default()
}
}
}