Rust 如何将一个结构的成员函数作为回调传递给另一个结构

Rust 如何将一个结构的成员函数作为回调传递给另一个结构,rust,Rust,我想把一个结构的成员函数传递给另一个结构 对不起,英语不好,不能说更多细节 use std::thread; struct Struct1 {} impl Struct1 { pub fn do_some(&mut self, s: &str) { // do something use s to modify self } } struct Struct2 { cb1: Box<Fn(&mut Struct1, &am

我想把一个结构的成员函数传递给另一个结构

对不起,英语不好,不能说更多细节

use std::thread;

struct Struct1 {}

impl Struct1 {
    pub fn do_some(&mut self, s: &str) {
        // do something use s to modify self
    }
}

struct Struct2 {
    cb1: Box<Fn(&mut Struct1, &str)>,
}

fn main() {
    let s1 = Struct1 {};

    let s2 = Struct2 {
        cb1: Box::new(s1.do_some),  // how to store do_some function in cb1 ?
    };
}
使用std::thread;
结构1{}
impl结构1{
pub fn do_some(&mut self,s:&str){
//做点什么用s来修饰自己
}
}
结构2{
cb1:Box,
}
fn main(){
设s1=Struct1{};
设s2=Struct2{
cb1:Box::new(s1.do\u some),//如何在cb1中存储do\u some函数?
};
}

你们非常接近!要引用方法或任何其他符号,请使用分隔符
,并指定所述符号的路径。方法或相关函数位于类型的命名空间中,因此方法的路径是
Struct1::do\u some
。在Java中,还可以使用
操作符访问这些对象,但在Rust中,
操作符仅用于现有对象,而不用于类型名称

因此,解决办法是:

let s2 = Struct2 {
    cb1: Box::new(Struct1::do_some),
};
但是,您可以稍微改进一下函数的类型
Box
是一个装箱的trait对象,但如果不想使用闭包,则不一定需要它。如果您只想引用“普通函数”(那些没有环境的函数),可以使用函数指针:

struct Struct2 {
    cb1: fn(&mut Struct1, &str),
}
注意小写的
fn
,我们不需要