为了学习Rust语法,我决定实现一个函数来对传入的数组进行排序:
在这个问题中,我找到了如何传递数组并更改其内容,但是除此之外,数组必须由可以相互比较的类型组成。我找到了
通过将这些知识与Rust书中有关动态分派的段落联系起来,我构建了像这样的东西:
有没有正确的语法来实现将实现某个 trait 的对象数组传递给函数?
fn sort(array) {
// actual sorting
}
在这个问题中,我找到了如何传递数组并更改其内容,但是除此之外,数组必须由可以相互比较的类型组成。我找到了
std::cmp::PartialOrd
trait,并发现数组的元素需要实现它。通过将这些知识与Rust书中有关动态分派的段落联系起来,我构建了像这样的东西:
use std::cmp;
fn sort(arr: &mut [&std::cmp::PartialOrd]) {
// actual sorting
}
这段代码无法编译:
error[E0393]: the type parameter `Rhs` must be explicitly specified
--> src/lib.rs:3:21
|
3 | fn sort(arr: &mut [&std::cmp::PartialOrd]) {
| ^^^^^^^^^^^^^^^^^^^^ missing reference to `Rhs`
|
= note: because of the default `Self` reference, type parameters must be specified on object types
有没有正确的语法来实现将实现某个 trait 的对象数组传递给函数?
&mut [&Trait]
是一个对实现了Trait
类型的元素的引用切片。这些元素存储在其他地方,而不是在数组中连续存储(这是不可能的,因为数组是同质的)。对引用数组进行排序很少是用户想要的。 - Lukas Kalbertodt