我试图通过给自己一个定向任务来获得更多的编程习惯,而我发现创建玩具布局引擎的那个似乎是一个很好的匹配.由于我专注于学习Python,我认为将教程转换为Python是一种很好的做法.我想同时,这会教我一些关于Rust的内容,以及一般的阅读代码.一场胜利!
我很难理解关键字(甚至是关键字?)Some和Simple做什么.它们出现在提供的代码中:
enum Selector {
Simple(SimpleSelector),
}
struct SimpleSelector {
tag_name: Option<String>,
id: Option<String>,
class: Vec<String>,
}
Run Code Online (Sandbox Code Playgroud)
我认为枚举是一种存储数据的方式,可能(确切地)是几种可能的类型之一,但我不明白这意味着什么.
作者代码中出现的另一件事是(例如)
match self.next_char() {
'#' => {
self.consume_char();
selector.id = Some(self.parse_identifier());
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我不知道该术语的Some作用.我已经尝试查看官方Rust文档,但我找不到这些术语的描述,即使Some在文档中使用!
这些术语有什么作用?更普遍的是有一个Rust关键字列表?不寻找"生锈编程语言关键词"似乎有所帮助.
Rust具有代数数据类型,简而言之就是具有多种可能形状的数据类型,例如:
enum OptionInt {
None,
Some(i32),
}
Run Code Online (Sandbox Code Playgroud)
是一种数据类型None(单例值)还是Some(i32)(a i32).在这种情况下,None并且Some是数据构造函数:当应用于值(或在没有任何值的情况下None)时,它们产生类型的值OptionInt.
这些数据构造函数也将出现在模式匹配中:
match an_option_int {
Some(an_integer) => 3 * an_integer,
None => 0
}
Run Code Online (Sandbox Code Playgroud)
是一个表达式,它将生成一个i32:
0如果an_option_int包含None6如果an_option_int包含Some(2)此功能也称为标记联合.