如何使用num :: Integer类型的数字文字? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

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呢?

generics rust
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.