以下代码无法编译。
错误信息如下:
我通过值传递将整数参数传递给
编辑
我在手册中发现了以下内容:
fn main() {
let foo = bar(8);
println!("Trying `foo` with 4: {:d}", foo(4));
println!("Trying `foo` with 8: {:d}", foo(8));
println!("Trying `foo` with 13: {:d}", foo(13));
}
//
fn bar(x: int) -> (|int| -> int) {
|n: int| -> int {
if n < x { return n }
x
}
}
错误信息如下:
11:32 error: explicit lifetime bound required
.../hello/src/main.rs:11 fn bar(x: int) -> (|int| -> int) {
^~~~~~~~~~~~
我通过值传递将整数参数传递给
bar
。为什么Rust关心通过值传递的整数的生命周期?编写返回闭包的这种函数的正确方法是什么?谢谢。编辑
我在手册中发现了以下内容:
在最简单和最便宜的形式(类似于a || {}表达式),lambda表达式通过引用捕获其环境,有效地借用了在函数内部提到的所有外部变量的指针。或者,编译器可能会推断lambda表达式应该从环境中复制或移动值(取决于它们的类型)。
编译器如何推断是否通过引用、复制还是移动来捕获外部变量?评估标准是什么,应用顺序是什么?是否有记录(除了阅读编译器代码)?
rustc 0.12.0-nightly (af3889f69 2014-09-18 21:20:38 +0000)
。它无法编译最终版本。我收到以下错误:error: internal compiler error: get_unique_type_id_of_type() - unexpected type: closure, ty_unboxed_closure(syntax::ast::DefId{krate: 0u32, node: 170u32}, ReScope(169u32)) note: the compiler hit an unexpected failure path. this is a bug.
- JONNALAGADDA Srinivasrustc 0.12.0-nightly (72841b128 2014-09-21 20:00:29 +0000)
。我发现它和你的不完全相同。使用该版本时,我仍然像以前一样出现上述编译器崩溃。我正在使用Ubuntu 14.04 x86_64
,这是否提供了任何额外的信息。 - JONNALAGADDA Srinivas|&:int |
部分会出现错误。 - mmtauqir