笔者猜读这篇文章的读者大致分为三种:
- 我过去使用的语言中没有闭包这个概念
- 我过去使用的语言中的闭包概念和Rust中的不一致
- 我第一次学编程
总之您遇到了一个极难解决的问题:难以理解Rust中的闭包。基于这种情况我们来简单的介绍一下Rust中的闭包到底是个什么东西。
首先作为C语言的程序员很容易把闭包误以为是指向函数的指针,笔者知道很多人都有这样的误解。首先我们要说明至少在Rust中闭包并不是这样的。当然很多语言中的闭包也不是函数指针。这里我们不讨论别的语言的事情,毕竟各个语言的实现不太相同。
那么Rust的闭包到底是什么东西,首先Rust的闭包是个匿名函数,它的类型是个实现了 Fn trait
的匿名 struct
。我要是这么讲是不是更糊涂了?如果讲到这里就结束的话,我估计不少读者会给我寄刀片。(笑)
首先一件事情就是闭包的返回值是自行推导的,这点和函数不太一样。以至于有一部分初学者可能会出现一个会写函数不会写闭包的问题。譬如说:
fn main() {
let mut title = "The Injustice to Dou ".to_string();
let mut dou_e = |foo: char| title.push(foo);
let bar = dou_e('E');
println!("{:?}", bar);
}
然后您就会问了,为什么我没有得到“The Injustice to Dou E”这个结果呀?
1
共 0 条评论, 1 页
评论区
写评论还没有评论