gpt4 book ai didi

rust - 如何告诉Rust我的自定义特征已经实现了 `num_traits::pow::Pow`函数

转载 作者:行者123 更新时间:2023-12-03 11:44:40 32 4
gpt4 key购买 nike

我想创建一个特征,说它实现了num_traits::pow::Pow - Rust
我的特征当前定义为:

pub trait PrimeSieveTrait:
AddAssign + MulAssign + integer::Roots + FromPrimitive + ToPrimitive + PartialOrd + Copy {}
impl<T> PrimeSieveTrait for T
where T:
AddAssign + MulAssign + integer::Roots + FromPrimitive + ToPrimitive + PartialOrd + Copy {}
我关心的 T类型是 u32u64,它们已经在 num_traits::pow::Pow - Rust上实现了 .pow()函数,并且返回 u32u64。如何修改特征定义以使以下功能正常工作?
fn test_case<T: PrimeSieveTrait>(p: T, x: u32) -> T {
let one = T::from_u8(1).unwrap();
p.pow(x) - one
}

最佳答案

Rust的错误非常有帮助:

error[E0599]: no method named `pow` found for type parameter `T` in the current scope
--> src/common/divisor.rs:30:19
|
30 | let p_power = p.pow(x);
| ^^^ method not found in `T`
|
= help: items from traits can only be used if the type parameter is bounded by the trait
help: the following traits define an item `pow`, perhaps you need to restrict type parameter `T` with one of them:
|
26 | fn step_calc_divisors<T: rug::ops::Pow + PrimeSieveTrait>(divisors: &mut Vec<T>, strict_lower_bound: T, upper_bound: T, p: T, x: u32) {
| ^^^^^^^^^^^^^^^^^^
26 | fn step_calc_divisors<T: num::PrimInt + PrimeSieveTrait>(divisors: &mut Vec<T>, strict_lower_bound: T, upper_bound: T, p: T, x: u32) {
| ^^^^^^^^^^^^^^^^^
26 | fn step_calc_divisors<T: num::traits::Pow + PrimeSieveTrait>(divisors: &mut Vec<T>, strict_lower_bound: T, upper_bound: T, p: T, x: u32) {
| ^^^^^^^^^^^^^^^^^^^^^
尝试第二个工作:
pub trait PrimeSieveTrait:
AddAssign + MulAssign + DivAssign + integer::Roots + PrimInt + FromPrimitive {}
impl<T> PrimeSieveTrait for T
where T:
AddAssign + MulAssign + DivAssign + integer::Roots + PrimInt + FromPrimitive {}

关于rust - 如何告诉Rust我的自定义特征已经实现了 `num_traits::pow::Pow`函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64157928/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com