Rust 如何在类型之间转换

Rust 如何在类型之间转换,rust,Rust,正在尝试编写一个在范围内填充向量的泛型函数 fn填充向量(目标:&mut向量,目标:usize,步骤:usize){ 让mut start=0_usize; 因为我在0到{ 如果开始>=到{ 打破 }否则{ 如果开始>0{ push(T::from(start)); } 开始+=步进; } }; } 但是我弄错了 error[E0277]: the trait bound `i32: std::convert::From<usize>` is not satisfied --

正在尝试编写一个在范围内填充向量的泛型函数

fn填充向量(目标:&mut向量,目标:usize,步骤:usize){
让mut start=0_usize;
因为我在0到{
如果开始>=到{
打破
}否则{
如果开始>0{
push(T::from(start));
}
开始+=步进;
}
};
}
但是我弄错了


error[E0277]: the trait bound `i32: std::convert::From<usize>` is not satisfied
  --> src/main.rs:28:14
fill_vec(&mut target, 30, 4);
   |              ^^^^^^^^^^^ the trait `std::convert::From<usize>` is not implemented for `i32`

错误[E0277]:未满足特性绑定'i32:std::convert::From'
-->src/main.rs:28:14
填充向量(&mut目标,30,4);
|^^^^^^^^^^i32未实现特性“std::convert::From”`

实际上,您不能将
usize
隐式转换为
i32
。 对于这种类型的强制转换(可能导致截断),您可以 需要
作为
关键字

fn main(){
让mut v:Vec=Vec::new();
设a:usize=123;
//v.推动(a);
//应为'i32',应为'usize'`
//v.push(i32::from(a));
//没有为'i32'实现特性'std::convert::From'`
v、 推(a为i32);//强制转换
}
关于您的具体示例,使用
num\u traits
板条箱可能会有所帮助

fn填充向量(
目标:&mut Vec,
到:使用,
步骤:使用,
) {
让mut start=0_usize;
因为我在0到{
如果开始>=到{
打破
}否则{
如果开始>0{
push(T::from_usize(start).unwrap());
}
开始+=步进;
}
}
}

您可以尝试
填充向量(&mut target,30为usize,4为usize)
?同样的事情。错误表明,
i32
没有实现
From
,因为
usize
的范围更大,而
From::From
是绝对正确的。你会考虑从使用<代码> Type吗?请用复制错误所需的最小代码来回答问题。谢谢我也想过。这可能就是原因。但是我很困惑,因为这个函数是有效的。I thouth数字默认为i32类型
rust fn adds(x:T,y:R)->T其中T:Copy+From+Add,R:Copy{x+T::From(y)}
感谢您的回答。对不起。不能投票支持你的答案。@Khatry没问题,别担心。