Hello,
I'm quite new to rust and I'd like to implement the visitor pattern for a little side-project.
I'm stuck attempting to hide the mutability of the visitor, so I guess I'm missing something obvious (sorry for that in advance !)
here's a minimal example :
trait Visitor {
fn visit(&self);
}
fn walk(v: &dyn Visitor){
v.visit();
}
struct DummyVisitor;
impl Visitor for DummyVisitor {
fn visit(&self){
println!("dummy")
}
}
struct AccumVisitor{
i: u8,
}
impl AccumVisitor {
fn visit(&mut self){
self.i += 1;
}
}
// err : expected fn pointer `fn(&AccumVisitor)`found fn pointer `fn(&mut AccumVisitor)`
//
// impl Visitor for AccumVisitor {
// fn visit(&mut self){
// self.i += 1;
// }
// }
// err: `self` is a `&` reference, so the data it refers to cannot be written
//
//impl Visitor for &mut AccumVisitor {
// fn visit(&self){
// self.i += 1;
// }
//}
fn main() {
let vd = DummyVisitor;
walk(&vd);
let va = &mut AccumVisitor{i:0};
// walk(&va)
va.visit();
}
Best,