在struct中使用函数指针的正确方法

时间:2016-05-22 03:04:29

标签: rust

我正在尝试创建一个具有可变函数指针的结构。我有它的设置,以便函数指针初始化为特定的函数,但当我尝试使用它时生锈不识别指针。

我得到了

hello.rs:24:14: 24:22 error: no method named `get_func` found for type `&Container` in the current scope
hello.rs:24         self.get_func(self, key)
                         ^~~~~~~~

这是我的代码

use std::collections::HashMap;

struct Container {
    field: HashMap<String, i32>,
    get_func: fn(&Container, &str) -> i32
}

fn regular_get(obj: &Container, key: &str) -> i32 {
    obj.field[key]
}

impl Container {
    fn new(val: HashMap<String, i32>) -> Container {
        Container {
            field: val,
            get_func: regular_get
        }
    }

    fn get(&self, key: &str) -> i32 {
        self.get_func(self, key)
    }
}

fn main() {
    let mut c:HashMap<String, i32> = HashMap::new();
    c.insert("dog".to_string(), 123);
    let s = Container::new(c);
    println!("{} {}", 123, s.get("dog"));
}

1 个答案:

答案 0 :(得分:7)

看起来你的代码中只有两个简单的错误。如果你改变了这个

fn get(&self, key: &str) -> Container
{
    self.get_func(self, key)
}

到这个

fn get(&self, key: &str) -> i32
{
    (self.get_func)(self, key)
}

然后它的工作原理。我不知道为什么语法self.get_func(self, key)不起作用;它可能只是生锈编译器的疏忽。