首页 文章

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

提问于
浏览
3

我试图通过给自己一个定向任务来获得更多的编程习惯,而我发现的那个似乎是一个很好的匹配 . 由于我专注于学习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关键字列表?不寻找“生锈编程语言关键词”似乎有所帮助 .

2 回答

  • 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

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

相关问题