通过可变价值传递的惯用方法是什么?

时间:2015-07-13 16:28:58

标签: rust

我是否遗漏了某些内容,或者Rust中不支持可变的非引用参数?

举个例子,我正在玩Rust并试图为所有数字类型实现Euclid's algorithm泛型,理想情况下我只想按值传递参数并使它们可变,但添加关键字{{1}参数类型被编译器拒绝。所以我必须声明一个可变的参数副本作为函数序言。这是惯用的吗?

mut

1 个答案:

答案 0 :(得分:9)

当然可以说一个论证是可变的:

pub fn gcd<T>(mut a: T, mut b: T) -> T
    where T: Copy + Zero + PartialOrd + Rem<Output=T>
{
   while b > T::zero() {
      let t = b;
      b = a % b; 
      a = t;
   }

   a
}
  

[声明参数的可变副本]是惯用的还是有效的?

从效率的角度来看应该没问题。优化器将看到它们是相同的,不会进行任何无关的复制。

至于惯用语,我不太确定。我最初的开始是没有将mut放在我的函数参数列表中,因为我觉得这是关于实现的夸大细节。如今,我继续把它放在那里。