小编Jak*_* W.的帖子

为什么 Unsigned 特征不会自动给出 Rust 中的 One 特征?

我想编写以下形式的通用函数

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::SubAssignstd::cmp::PartialOrd-trait 等并未针对T.

有没有一种简单的方法来指定我的号码只是其中一种类型u8-u128因此具有所有这些特征?为什么 Rust 编译器不清楚这一点,即Unsigned不具有PartialOrd-trait 的 -type 的示例是什么?

编辑:澄清一下:我想要的是一种方式来表达“T必须具有其中一种类型u8...... u128(也许BigUInt)”,然后让 Rust 自动看到“因为T是其中一种类型,所以以下特征具有实施对象Tstd::cmp::PartialOrd, std::ops::SubAssign, ...”

types traits rust

4
推荐指数
1
解决办法
1100
查看次数

尝试删除和插入 HashMap 时出现错误的可变借用 (E0502)

我是 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)

现在,借用检查器rif-block 的三行中抱怨借用不可变,然后是可变的,然后又是不可变的。我不明白发生了什么......我猜因为get,removeinsert方法r作为隐式参数,它在三个调用中被借用。但是为什么remove调用中的这个借用是可变的呢?

hashmap ownership rust borrow-checker

1
推荐指数
1
解决办法
64
查看次数

标签 统计

rust ×2

borrow-checker ×1

hashmap ×1

ownership ×1

traits ×1

types ×1