如何使用num :: Integer类型的数字文字?

时间:2018-01-04 03:34:03

标签: generics rust

我正在尝试编写一些数字模板函数,我发现了一些绊脚石。我最近发现的是以下代码:

extern crate num;
use num::Integer;
use num::Zero;

fn f<T: Integer>() -> T {
    T::zero() + 1
}

fn main() {
    let x: u32 = f();
    println!("{}", x);
}

这不起作用,因为1是“不匹配的类型”而编译器是“期望的类型参数,找到了整数变量”。

现在,我知道T::zero() + T::one()确实有效并“修复”了上述问题,但是如果我使用的数字文字没有像Zero那样的内容,比如2,10,100?< / p>

1 个答案:

答案 0 :(得分:1)

FromPrimitiveNum::from_str_radix似乎符合您的需求。

extern crate num;
use num::{Integer, FromPrimitive};

fn f<T: Integer + FromPrimitive>() -> T {
    T::zero() + T::from_i32(1).unwrap()
}

fn main() {
    let x: u32 = f();
    println!("{}", x);
}

extern crate num;
use num::Integer;

fn f<T: Integer>() -> T {
    T::zero() + T::from_str_radix("1", 10).ok().unwrap()
}

fn main() {
    let x: u32 = f();
    println!("{}", x);
}