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中文翻译12

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

Rust中文翻译20

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

Rust中文翻译1

用kindle看trpl有一段时间了,由于总是在地铁里看,对知识的巩固和加深理解没有好处,还是决定自己翻译一遍吧,便于自己学习,也可以给其他人以参考. 平时加班太多了,我希望能坚持做完. 闲话不说,上...
  • zcmit
  • zcmit
  • 2015年06月14日 17:16
  • 2543

rust book 中文翻译

  • 2015年07月10日 12:03
  • 2.24MB
  • 下载

CheckStyle检查规则中文翻译

版权声明:本文为博主原创文章,未经博主允许不得转载。 本文主要介绍CheckStyle 7.0版本的各个规则配置项目,这个版本的CheckStyle将样式规则分为了以下十七种类型: 1. An...

SIMCOM公司的SIM300的AT指令中文翻译

SIMCOM公司的SIM300的AT指令中文翻译根据V.25TER的AT指令概要(Overview of AT Commands According to V.25TER)A/  重新发送最后给的AT...

Codec 驱动概述(中文翻译)/ codec.txt

【版权声明】     本文为 Codec 的概述性文档,翻译自 Linux 内核源码文档中的 Documentation/sound/alsa/soc/codec.txt,遵循 GPL 协议。  ...

在线教程 Effective C++(第三版 中文翻译)

在线教程 Effective C++(第三版 中文翻译)  封面 关于译者 前言 导读 第一章 从C转向C++  条款1:尽量用const和inline而不用#define  条款...

iOS-苹果应用商店审核指南中文翻译

前言   感谢您付出宝贵的才华与时间来开发iOS应用程程序。从职业与报酬的角度而言,这对于成千上万的开发员来说一直都是一项值得投入的事业。我们希望帮助您加 入这个成功的组织。这是我们首次发布《应用程序...

AlphaGo围棋论文中文翻译

Mastering the game of Go with deep neural networks and tree search (使用深度神经网络与树搜索使计算机精通围棋)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Rust中文翻译17
举报原因:
原因补充:

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