简介学过 C 语言的人都知道 #define 用来定义宏(macro),而且大学很多老师都告诉你尽量少用宏,因为 C 里面的宏是一个很危险的东西-宏仅仅是简单的文本替换,完全不管语法,类型,非常容易出错。听说过或用过 Lisp 的人觉得宏极其强大,就连美国最大的创业孵化器公司创始人 Paul Gram 也极力鼓吹 Lisp 的宏是有多么强大。那么宏究竟是什么样的东西呢?
错误处理是保证程序健壮性的前提,在编程语言中错误处理的方式大致分为两种:抛出异常(exceptions)和作为值返回。Rust 将错误作为值返回并且提供了原生的优雅的错误处理方案。熟练掌握错误处理是软件工程中非常重要的环节,让我一起来看看Rust展现给我们的错误处理艺术。17.1 Option和Result谨慎使用panic:fn guess(n: i32) -> bool { if n < 1 || n >
从for循环讲起我们在控制语句里学习了Rust的for循环表达式,我们知道,Rust的for循环实际上和C语言的循环语句是不同的。这是为什么呢?因为,for循环不过是Rust编译器提供的语法糖!首先,我们知道Rust有一个for循环能够依次对迭代器的任意元素进行访问,即:for i in 1..10 { println!("{}", i);}这里我们知道, (1..
闭包作为参数(Taking closures as arguments)现在我们知道了闭包是 trait,我们已经知道了如何接受和返回闭包;就像任何其它的 trait!这也意味着我们也可以选择静态或动态分发。首先,让我们写一个获取可调用结构的函数,调用它,然后返回结果:fn call_with_one<F>(some_closure: F) -> i32 where F : Fn(i32) ->