如果读者不知道阶乘函数是采用u64类型编写的,而我正在尝试使用BigUint来通过阶乘函数获取更大的数字。

我正在尝试将一个整数转换为Rust中的BigUint,这是我要更改的代码:

pub fn factorial_iterative(n: u64) -> u64 {
    (1..n+1).fold(1, |p, n| p*n)
}

我一直在关注rust的便捷自动校正功能,并且提出了以下建议:

extern crate num;
use num::BigUint;

pub fn factorial_iterative(n: BigUint) -> BigUint {
    (1..n+1).fold(1 as <num::BigUint as Trait>::to_u64, |p, n| p*n)
}

但是现在它抛出了错误:failed to resolve use of undeclared type or module Trait
要进行这项工作,我需要添加或更改什么?

最佳答案

获得1的正确方法是

use num::BigUint;
use num::One;

pub fn factorial_iterative(n: u64) -> BigUint {
    (1..=n).fold(BigUint::one(), |p, n| p*n)
}

您无法使用BigUint进行范围调整,因此必须使用u64范围。您可以使用..=获取包含范围。 use crate::num::One;是使用::one()所必需的,因为它是在One特性中实现的,该特性需要在范围内。

关于rust - 无法在阶乘函数中解析为Rust中的Trait,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57840696/

10-09 19:32