Rust中文翻译17

翻译 2015年07月09日 22:22:30

4.2.4 文档测试

没有什么比带有示例的文档更好的了.也没有什么比不能工作的例子更糟的了,因为有可能文档中的代码已经修改了.为此,Rust支持自动测试我们示例代码.让我们看一个富有血肉的src/lib.rs的例子:


//! The àdder` crate provides functions that add numbers to other numbers.
//!
//! # Examples
//!
//! ```
//! assert_eq!(4, adder::add_two(2));
//! ```

/// This function adds two to its argument.
///
/// # Examples
///
/// ```
/// use adder::add_two;
///
/// assert_eq!(4, add_two`2));
/// ```

pub fn add_two(a: i32) -> i32 {
    a + 2
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_works() {
        assert_eq!(4, add_two(2));
    }

}

注意模块级别的注释是//!,函数级别的注释是///.Rust注释支持注释中使用Markdown,习惯上使用#Example来开始示例.

运行这个测试:


现在我们有3中测试了!注意文档测试的名字:_0是用来模块测试的时候生成的,所以add_two_0就是函数测试.这个名字会自动增长,比如add_two_1等等.

Page 83

4.3 条件编译

Rust有一个特殊的属性, #[cfg], 你可以通过标识来控制编译器,它有两种形式:

#[cfg(foo)]

#[cfg(bar="baz")]

它还有一些帮助选项:

#[cfg(any(unit, windows))]

#[cfg(all(unit, target_pointer_width="32"))]

#[cfg(not(foo))]

也可以嵌套:

#[cfg(any(not(unix), all(target_os="macos", target_arch = "powerpc")))]

至于如何启用和禁用这些开关,你可以试用Cargo,在Cargo.toml文件中有一个[features]属性:

[features]
#no features by default
default = []

# The "secure-password" feature depands on the bcrypt package.
secure-password = ["bcrypt"]

如果你这样设置了,Cargo就会传递一个标识给rustc:

--cfg feature="${feature_name}"

这些cfg标记一起决定了哪些代码被激活,哪些代码被编译.看看这个代码:

Page 84

#[cfg(feature = "foo")
mod foo {
}

如果我们用cargo build --feature "foo"来编译,它会给rustc发送一个--cfg feature "foo",然后输出就会带有mod foo代码.如果我们使用一般的cargo build不传递任何参数,那么foo模块就不会存在于代码中.

4.3.1 cfg_attr

你可以设置另一个cfg的变量cfg_attr:

#{cfg_attr(a, b)]

它和这个命令一样:当a被cfg属性设置以后再使用#[b].

4.3.2 cfg!

cfg!语法可以使用在代码中:

if cfg!(target_os = "mac_os") || cfg!(target_os = "ios") {
    println!("Think Different!");
}

在运行时会被替换成true或者false,取决于机器的配置.


相关文章推荐

Rust中文翻译4

Page 20 Cargo是Rust程序员们用来帮助管理Rust程序的工具.Cargo现在是1.0以前的版本,所以它还在完善中.然而,它已经足够好用了,所以我们还是建议从开始就使用Cargo...
  • zcmit
  • zcmit
  • 2015-06-17 22:29
  • 824

Rust中文翻译15

大多数使用垃圾回收的语言都默认在堆上分配内存.这就意味着每个值都要装箱.有很多原因导致他们这样设计,但是这超出了本书的范围.同样,也有很多优化设计导致它并不是100%这样工作的.垃圾回收器宁愿选择在堆...
  • zcmit
  • zcmit
  • 2015-07-08 00:47
  • 967

Rust中文翻译3

2.2 Hello World Page 17 现在你已经安装了Rust,让我们写下你的第一个Rust程序.用任何一种语言写下第一个程序的时候打印出"Hello World"是...
  • zcmit
  • zcmit
  • 2015-06-16 17:16
  • 809

Rust中文翻译12

Page 63 我们已经学习了如何写一些Rust代码了.但是能写Rust代码和能写好的Rust代码又很大区别. 这一章讲述一些相对独立的指南,告诉你如何把的Rust代码更进一步.一...
  • zcmit
  • zcmit
  • 2015-07-03 17:11
  • 800

Rust中文翻译9

Page 54 另一个奇怪的问题是:我们使用了_left和_right来命名.下划线是怎么回事?我们并没有计划在加锁时使用这两个变量.我们仅仅只想要得到它.因此,Rust会警告我们并没有使用...
  • zcmit
  • zcmit
  • 2015-07-02 11:37
  • 904

Rust中文翻译19

我们来讨论一下迭代器. 还记得Rust的for循环么?有一个例子: for x in 0..10 {     println!("{}", x); } 现在你更了解Rust了,我们可以讨论它的工作...
  • zcmit
  • zcmit
  • 2015-07-11 11:37
  • 708

Rust中文翻译20

Page 100 并发和并行在计算机科学中是非常重要的主题.在工业领域也很火.计算机如今有越来越多的核心,然而很多程序员还没有准备好使用它们. Rust安全的内存特性同样适用于并发存储.并发的...
  • zcmit
  • zcmit
  • 2015-07-11 15:49
  • 1141

Rust中文翻译28

5.9 引用和借用 本节是Rust三处描述所有权系统的其中之一.所有权是Rust最独特和引人注目的特性,这也是Rust程序员必须熟悉的一个特性.所有权使Rust得以实现它最大的设计目标,内存安全....
  • zcmit
  • zcmit
  • 2015-07-18 22:32
  • 533

Rust中文翻译23

4.9 Borrow 和 AsRef Borrow和AsRef特性特性很相似,但是不一样.这里有一个快速的关于两者的回顾. 4.9.1 Borrow Borrow特性...
  • zcmit
  • zcmit
  • 2015-07-13 15:20
  • 711

Rust中文翻译16

Page 75 Program testing can be a very effective way to show the presence of bugs, but it is hop...
  • zcmit
  • zcmit
  • 2015-07-08 23:17
  • 750
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)