有没有一种方法可以在没有宏的情况下为rust中的结构实现执行var args?
我以前见过这种类型的var args:有没有一种方法可以在没有宏的情况下为rust中的结构实现执行var args?,rust,Rust,我以前见过这种类型的var args: #![feature(macro_rules)] struct Foo; impl Foo { fn add2(&self, a:int, b:int) -> int { return a + b; } fn add3(&self, a:int, b:int, c:int) -> int { return a + b + c; } fn add4(&self, a:int, b:i
#![feature(macro_rules)]
struct Foo;
impl Foo {
fn add2(&self, a:int, b:int) -> int {
return a + b;
}
fn add3(&self, a:int, b:int, c:int) -> int {
return a + b + c;
}
fn add4(&self, a:int, b:int, c:int, d:int) -> int {
return a + b + c + d;
}
}
macro_rules! add(
($foo:ident, $a:expr, $b:expr) => (
$foo.add2($a, $b);
);
($foo:ident, $a:expr, $b:expr, $c:expr) => (
$foo.add3($a, $b, $c);
);
($foo:ident, $a:expr, $b:expr, $c:expr, $d:expr) => (
$foo.add4($a, $b, $c, $d);
);
)
fn main() {
let foo = Foo;
println!("Add:{}", add!(foo, 1, 2));
println!("Add:{}", add!(foo, 1, 2, 3));
println!("Add:{}", add!(foo, 1, 2, 3, 4));
}
(是的,没错,我使用显式返回,因为;/no;语义很糟糕)
无论如何,有没有一种方法可以在不使用尴尬电话的情况下做类似的事情呢!(obj,…)语法,并使用您通常使用的更自然的obj.call(…)语法?Rust目前不支持可变函数。† 另一种更惯用的设计是使用数组和迭代:
fn添加(&self,数字:&[int])->int{
number.iter().sum()/…或任何您想要的迭代内容
}
当使用方法内联进行优化构建时(您可以将#[inline]
放在方法上,然后它也可以跨板条箱工作),如果LLVM Optimizer相信这会更便宜,那么这将与具有许多参数的任意函数一样有效
†实际上是这样,但仅适用于C ABI的外部函数。不适用于生锈功能