I normally prefer using `std::num::{cast, zero}` as its a tad more readable. So:

    use std::num;

    fn average<T:Int>(values: &[T]) -> T {
        values.iter()
              .fold(num::zero::<T>(), |x, y| x.add(y))
              .div(&num::cast(values.len()))
    }

    fn main() {
       print!("{}", average([1,2,3]))
    }

On 25/09/2013, at 8:09 AM, Scott Lawrence <byt...@gmail.com> wrote:

> Use NumCast::from(count).
> 
> You'll also want to be sure to initialize sum. I'd use the Zero instance.
> 
> use std::num::Zero;
> fn average<T:Int>(values:&[T]) -> T {
>    let count = values.len();
>    let mut sum:T = Zero::zero();
>    for v in values.iter() {
>        sum = sum.add(v);
>    }
>    return sum / NumCast::from(count);
> }
> fn main() {
>    println(fmt!("%d", average([1,2,3])))
> }
> 
> On Wed, 25 Sep 2013, Andreas Zwinkau wrote:
> 
>> I tried to write an average function, but so far failed to convince
>> the type checker.
>> 
>> fn average<T:Int>(values:&[T]) -> T {
>> let count = values.len();
>> let mut sum:T;
>> for v in values.iter() {
>>   sum = sum.add(v);
>> }
>> return sum / count;
>> }
>> 
>> error: mismatched types: expected `T` but found `uint` (expected type
>> parameter but found uint)
>> 
>> The problem is that sum is the generic type T, but count is uint due
>> to the definition of the len function. Casting "count as T" should
>> work, i thought, but rustc seems to have another opinion?
>> 
>> 
>> -- 
>> Andreas Zwinkau
>> 
>> work email: zwin...@kit.edu
>> private email: q...@web.de
>> homepage: http://beza1e1.tuxen.de
>> _______________________________________________
>> Rust-dev mailing list
>> Rust-dev@mozilla.org
>> https://mail.mozilla.org/listinfo/rust-dev
>> 
> 
> -- 
> Scott Lawrence
> _______________________________________________
> Rust-dev mailing list
> Rust-dev@mozilla.org
> https://mail.mozilla.org/listinfo/rust-dev

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to