Czy brakuje mi czegoś, czy też zmienne argumenty nieodsyłania nie są obsługiwane w Rust?Jaki jest idiomatyczny sposób przekazywania wartości zmiennej?
Aby dać przykład, bawiłem się z Rustem i próbowałem implementować Euclid's algorithm generyczny dla wszystkich typów liczbowych, i idealnie chciałem tylko przekazać argumenty według wartości i mieć je zmienne, ale dodanie słowa kluczowego mut
do typu argumentu jest odrzucone przez kompilator. Tak więc muszę zadeklarować zmienną kopię argumentu jako prologu funkcji. Czy to jest idiomatyczne/skuteczne?
use std::ops::Rem;
extern crate num;
use self::num::Zero;
pub fn gcd<T: Copy + Zero + PartialOrd + Rem<Output=T>>(a : T, b : T) -> T
{
let mut aa = a;
let mut bb = b;
while bb > T::zero() {
let t = bb;
bb = aa % bb;
aa = t;
}
aa
}
Duh! Pisałem 'mut' przed' T', myślałem, że jest podobny do tego, jak wygląda mutable ref type ... Dzięki! –
@MaxGalkin yup, odzwierciedla to, jak zmienne wiązanie zmiennych jest zadeklarowane w innych miejscach - 'let mut foo: u8 = 42'. – Shepmaster
Patrzyłem na przykłady z 'a: & mut T', gdzie' mut' jest obok typu i myślałem, że po prostu pozostaje obok typu :) –