未能在阶乘函数中解析为 Rust 中的特征
failing to resolve as Trait in Rust in a factorial function
以防 reader 不知道阶乘函数被编写为采用 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
特性中实现。
@Unlikus 差一点就答对了。我能够更正该功能的方法是:
use num::one;
use num::{BigUint, One};
pub fn factorial_iterative(n: BigUint) -> BigUint {
(one()..n+one()).fold(BigUint::one(), |p, n| p*n)
}
谢谢。您能够帮助我找到正确的特征来更正我的代码。
以防 reader 不知道阶乘函数被编写为采用 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
特性中实现。
@Unlikus 差一点就答对了。我能够更正该功能的方法是:
use num::one;
use num::{BigUint, One};
pub fn factorial_iterative(n: BigUint) -> BigUint {
(one()..n+one()).fold(BigUint::one(), |p, n| p*n)
}
谢谢。您能够帮助我找到正确的特征来更正我的代码。