में फ़ंक्शन पॉइंटर्स रखने का सही तरीका मैं एक संरचना बनाने की कोशिश कर रहा हूं जिसमें एक परिवर्तनीय फ़ंक्शन पॉइंटर है। मैंने इसे सेटअप किया है ताकि फ़ंक्शन पॉइंटर को किसी विशेष फ़ंक्शन में प्रारंभ किया जा सके, लेकिन जब मैं इसे उपयोग करने का प्रयास करता हूं तो जंग सूचक को पहचान नहीं पाता है।संरचना
मैं
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"));
}
वह पहली त्रुटि शर्मनाक है। दूसरा, मुझे समझ में नहीं आता है। मैं इसके बारे में एक मुद्दा बनाने जा रहा हूँ। – franklynd
यह आसान है - संकलक सोचता है कि आप 'सेल्फ' पर लागू की गई विधि को निष्पादित करने का प्रयास कर रहे हैं, लेकिन आप जो चाहते हैं वह 'get_func' फ़ील्ड तक पहुंचना है और इसे इसके बजाय विधि के रूप में कॉल करना है। – Limeth
मैं मान को एक नए क्षेत्र में बांधने के लिए उपयोग करता था और फिर इसे कॉल करता था, लेकिन यह समाधान अधिक सुरुचिपूर्ण है। – Limeth