小编sco*_*t97的帖子

如何在 Rust 中使用方法作为函数指针

我有一个需要改变结构内部数据的特征方法,我希望可以将 setter 方法作为参数传递给特征方法。我想这样做,这样我就可以通过指定作为参数传递的函数来灵活地处理变化的内容。

这段代码是我想要做的事情的简化,它具有相同的编译器问题。

谢谢

代码

struct MyStruct {
    i: usize
}

impl MyStruct {
    fn set_i(mut self, i: usize) -> Self {
        self.i = i;
        self
    }
    fn new() -> Self{
        MyStruct{ i: 0 }
    }
}

trait MyTrait {
    fn do_some_setting(&mut self, setter_function: fn(&mut Self, usize) -> Self ) {
        setter_function(&mut self, 7);
    }
}

impl MyTrait for MyStruct {}


fn main() {
    let mut s = MyStruct::new()
                .set_i(3);
                
    assert_eq!(s.i, 3);
    
    s.do_some_setting(MyStruct::set_i);
    
    assert_eq!(s.i, 7);
}
Run Code Online (Sandbox Code Playgroud)

问题

error[E0308]: mismatched …
Run Code Online (Sandbox Code Playgroud)

methods types function-pointers traits rust

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

标签 统计

function-pointers ×1

methods ×1

rust ×1

traits ×1

types ×1