gpt4 book ai didi

rust - 在 Rust 中给一个方法作为参数(Vec sort() 方法)

转载 作者:行者123 更新时间:2023-12-03 11:45:17 25 4
gpt4 key购买 nike

我不知道如何给 sort可以在 Vec 中找到的方法在这里实现 https://doc.rust-lang.org/std/vec/struct.Vec.html#method.sort作为参数。
我的代码灵感来自这个问题中可以找到的代码Is it possible to pass an object method as argument to a function and bind it to the object? ,但不会编译。
这是我想要做的一些示例代码,

fn pass_sort<F>(list: &mut Vec<i32>, sort_func: F)
where F: Fn(&mut Vec<i32>)
{
sort_func(list);
}

fn main() {
let mut list: Vec<i32> = vec![3, 2, 1];
pass_sort(&mut list, Vec::sort);
}
这是错误
error[E0599]: no function or associated item named `sort` found for struct `std::vec::Vec<_>` in the current scope
--> stak_test.rs:9:31
|
9 | pass_sort(&mut list, Vec::sort);
| ^^^^ function or associated item not found in `std::vec::Vec<_>`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0599`.
我猜这是因为 sort不是 Vec 的方法但是来自 Deref<Target=[T]> 的方法实现如文档中所述,但我无法弄清楚如何从此范围访问该方法:/。

最佳答案

I guess it happens because sort isn't a method of Vec but a method from the Deref<Target=[T]>


没错,方法来自 slice::sort ,所以你需要改用它:
fn pass_sort<F>(list: &mut Vec<i32>, sort_func: F)
where
F: Fn(&mut [i32]),
{
sort_func(list);
}

fn main() {
let mut list: Vec<i32> = vec![3, 2, 1];
pass_sort(&mut list, <[i32]>::sort);
}

关于rust - 在 Rust 中给一个方法作为参数(Vec sort() 方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62485986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com