有没有一种方法可以在没有宏的情况下为rust中的结构实现执行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

我以前见过这种类型的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: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的外部函数。不适用于生锈功能