【发布时间】:2022-01-01 03:24:09
【问题描述】:
我用这段代码 sn-p 解释我的问题。由于 main() 它按我的预期工作。现在我想把它移到 main() 之外的一个函数中。我还没有找到应该如何返回的语法。该文档似乎显示了许多方法,但我找不到确切的方法。
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
}
换句话说,我想重现这个用 C# 但用 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;
}
附:也许这是一个非常简单的概念性问题,对不起。
【问题讨论】:
-
请注意,前导下划线通常用于您不使用的标识符。所以
let mut _i应该是let mut i。