我试图通过给自己一个定向任务来更多地养成编程的习惯,而我发现create a toy layout engine的那个似乎是一个很好的匹配。由于我专注于学习Python,我认为将教程转换为Python是一种很好的做法。我想同时,这会教我一些关于Rust的内容,以及关于阅读代码的一般信息。一场胜利!
我很难理解关键字(甚至是关键字?)Some
和Simple
的用途。它们出现在所提供的代码中:
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;似乎在帮助。
答案 0 :(得分:8)
Rust功能Algebraic Data Types,简称为具有多种可能形状的数据类型,例如:
enum OptionInt {
None,
Some(i32),
}
数据类型是None
(单例值)还是Some(i32)
(i32
)。在这种情况下,None
和Some
是数据构造函数:当应用于某个值(或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。