5
私は可変ポインタを持つ構造体を作ろうとしています。関数のポインタが特定の関数に初期化されるように設定していますが、それを使用しようとすると錆がポインタを認識しません。私は構造体に関数ポインタを持つ正しい方法
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)
^~~~~~~~
を取得
は、ここであなたは自分のコード内の2個の単純なエラーを持っているように見えます私のコード
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"));
}
最初のエラーは恥ずかしいです。第二のものは、私には意味をなさない。私はそれについて問題を起こすつもりです。 – franklynd
これは簡単です - コンパイラは 'Self'で実装されているメソッドを実行しようとしていると思っていますが、' get_func'フィールドにアクセスして代わりにメソッドとして呼び出すだけです。 – Limeth
私は、新しいフィールドに値をバインドし、それを呼び出すのに使用しましたが、この解決法はより洗練されています。 – Limeth