I explain my question with this code snippet. Since main() it works as I expect. Now I want to move that to a function outside of main(). I have not found the syntax how the return should be done. The documentation seems to show many approaches, but I can't find the exact one.
fn main() {
println!("Hello, Rust!");
let mut _i = 0;
let mut closure = || -> i32 {
_i = _i + 1;
_i
};
println!("closure returns: {}", closure());
println!("closure returns: {}", closure());
println!("closure returns: {}", closure());
// OK, returns 1, 2, 3, ...
// now i want to encapsulate this in a function, something like:
let fn_closure = get_counter();
println!("closure returns: {}", fn_closure());
println!("closure returns: {}", fn_closure());
println!("closure returns: {}", fn_closure());
// expect: returns 1, 2, 3, ...
}
// try failed - how returns the closure?
fn get_counter() -> || -> i32 { //?
let mut _i = 1;
let mut f = || -> i32 {
_i = _i + 1;
_i
};
f
}
In other words, I would like to reproduce this same example written in C# but in Rust
Console.WriteLine("Hello, C#!");
var closure = GetCounter();
Console.WriteLine("closure returns: {0}", closure());
Console.WriteLine("closure returns: {0}", closure());
Console.WriteLine("closure returns: {0}", closure());
// OK, output is 1 , 2 , 3, ...
static Func<int> GetCounter()
{
int _i = 0;
return () => ++_i;
}
P.S. Perhaps it is a very easy conceptual question, excuse me.