8 个版本
0.2.4 | 2019 年 4 月 9 日 |
---|---|
0.2.3 | 2019 年 4 月 9 日 |
0.1.2 | 2019 年 4 月 2 日 |
#13 在 #重载
每月 34 下载
18KB
206 行
Function_Group
Function Group 是 Rust 编程语言的一个函数重载宏。该宏允许你定义多个接受可变数量参数的函数!实际上函数仍然只接受一个参数,但它们接受多种类型的元组。
函数组可以接受多种类型的参数,甚至可以是递归的。
function_group! {
fn add -> usize {
(one : usize, two : usize) {
one + two
}
(one : usize, two : usize, three: usize) {
add((one, two)) + three
}
}
}
assert!(add((5, 5)) == 10);
assert!(add((5, 5, 5)) == 15);
参数可以是可变或不可变的引用。
function_group! {
fn add_to {
(one : &mut usize, two : usize) {
*one += two;
}
(one : &mut usize, two : usize, three : usize) {
*one += two + three;
}
}
}
let mut x = 10;
add_to((&mut x, 5));
add_to((&mut x, 5, 5));
assert!(x == 25);
函数组甚至可以与类型关联。在下面的示例中,每个子函数都会传递对 self 的可变引用,并且这些函数将由 TestStruct 类型使用。
struct TestStruct(usize);
function_group! {
fn add_to_struct(&mut self : TestStruct) {
(one : usize) {
self.0 += one;
}
(one : usize, two : usize){
self.0 += one + two;
}
}
}
let mut x = TestStruct(10);
x.add_to_struct((1,2));
assert!(x.0 == 13);
可能的未来特性
- 泛型应该可以在每个子函数的基础上实现
- 在特质中有一个函数组不太可能
依赖
~2MB
~46K SLoC