Rust中的关键字“Some”和“Simple”有什么作用?

时间:2014-11-16 18:32:05

标签: rust

我试图通过给自己一个定向任务来更多地养成编程的习惯,而我发现create a toy layout engine的那个似乎是一个很好的匹配。由于我专注于学习Python,我认为将教程转换为Python是一种很好的做法。我想同时,这会教我一些关于Rust的内容,以及关于阅读代码的一般信息。一场胜利!

我很难理解关键字(甚至是关键字?)SomeSimple的用途。它们出现在所提供的代码中:

enum Selector {
    Simple(SimpleSelector),
}

struct SimpleSelector {
    tag_name: Option<String>,
    id: Option<String>,
    class: Vec<String>,
}

我认为枚举是一种存储数据的方式,可能(确切地)是几种可能的类型之一,但我不知道这意味着什么。

作者代码中出现的另一件事是(例如)

match self.next_char() {
    '#' => {
        self.consume_char();
        selector.id = Some(self.parse_identifier());
    }

在这种情况下,我不知道术语Some的作用。我试过查看the official Rust documentation,但我找不到这些术语的说明,即使文档中使用了Some

这些条款有什么作用?更普遍的是有一个Rust关键字列表?没有搜索&#34;生锈编程语言关键词&#34;似乎在帮助。

2 个答案:

答案 0 :(得分:8)

Rust功能Algebraic Data Types,简称为具有多种可能形状的数据类型,例如:

 enum OptionInt {
     None,
     Some(i32),
 }

数据类型是None(单例值)还是Some(i32)i32)。在这种情况下,NoneSome数据构造函数:当应用于某个值(或None的情况下没有任何值)时,它们会生成一个值类型为OptionInt

这些数据构造函数也将出现在模式匹配中:

match an_option_int {
    Some(an_integer) => 3 * an_integer,
    None => 0
}

是一个表达式,它将产生i32

    如果0包含an_option_int ,则
  • None 如果6包含an_option_int
  • ,则为
  • Some(2)

此功能也称为标记的联盟

答案 1 :(得分:1)

这些不是关键字,它们为枚举的变体命名。 Relevant section in the guide。关键字列表is in the reference