< 返回我的博客

套路小迷糊 发表于 2018-03-21 23:53

笔者猜读这篇文章的读者大致分为三种:

  • 我过去使用的语言中没有闭包这个概念
  • 我过去使用的语言中的闭包概念和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 页