这是我在Rust文档中看到的两个函数签名:
fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo }
fn modify_foo(foo: &mut i32) { *foo += 1; *foo }
Run Code Online (Sandbox Code Playgroud)
为什么不同的位置mut?
似乎第一个函数也可以声明为
fn modify_foo(foo: mut Box<i32>) { /* ... */ }
Run Code Online (Sandbox Code Playgroud) 为了学习Rust语法,我决定实现一个对传入数组进行排序的函数:
fn sort(array) {
// actual sorting
}
Run Code Online (Sandbox Code Playgroud)
在这个问题中,我发现了如何传递数组并更改其内容,但除此之外,数组必须包含可以比较的类型.我找到了这个std::cmp::PartialOrd特性,并发现数组的元素需要实现它.
通过将这些知识与Rust书中关于动态调度的段落联系起来,我构建了这样的东西:
use std::cmp;
fn sort(arr: &mut [&std::cmp::PartialOrd]) {
// actual sorting
}
Run Code Online (Sandbox Code Playgroud)
这不编译:
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
Run Code Online (Sandbox Code Playgroud)
是否有正确的语法来实现将实现特定特征的对象数组传递给函数?