我想编写以下形式的通用函数
fn my_function<T: num::Unsigned>(T: number) -> T
Run Code Online (Sandbox Code Playgroud)
为了将它们用于所有无符号整数类型,所以u8- u128。然而,我经常想做一些类似的事情
let n = number + 1;
Run Code Online (Sandbox Code Playgroud)
或者
let mut n = number;
number -= 1;
Run Code Online (Sandbox Code Playgroud)
在函数体中。现在,每次我使用类似的东西时,Rust 都会告诉我 -trait std::ops::SubAssign、std::cmp::PartialOrd-trait 等并未针对T.
有没有一种简单的方法来指定我的号码只是其中一种类型u8-u128因此具有所有这些特征?为什么 Rust 编译器不清楚这一点,即Unsigned不具有PartialOrd-trait 的 -type 的示例是什么?
编辑:澄清一下:我想要的是一种方式来表达“T必须具有其中一种类型u8...... u128(也许BigUInt)”,然后让 Rust 自动看到“因为T是其中一种类型,所以以下特征具有实施对象T:std::cmp::PartialOrd, std::ops::SubAssign, ...”
我是 Rust 的初学者并尝试使用HashMap<u64, u64>. 我想删除一个元素并使用修改后的值插入它:
let mut r = HashMap::new();
let mut i = 2;
...
if r.contains_key(&i) {
let v = r.get(&i).unwrap();
r.remove(&i);
r.insert(i, v+1);
}
Run Code Online (Sandbox Code Playgroud)
现在,借用检查器r在if-block 的三行中抱怨借用不可变,然后是可变的,然后又是不可变的。我不明白发生了什么......我猜因为get,remove和insert方法r作为隐式参数,它在三个调用中被借用。但是为什么remove调用中的这个借用是可变的呢?