机器之心:半小时入门Rust,这是一篇Rust代码风暴( 二 )
str 是一个基元数据类型 , 但在默认情况下 , 许多非基元数据类型也在作用域中 。
至于为什么可行 , 因为 Rust 在每个模块的开头都插入了:
再说说结构体
使用 struct 关键字声明结构体:
可以使用结构语句初始化:
有一个快捷方式可以从另一个结构体初始化本结构体的其余字段:
这就是所谓的「结构体更新语法」只能发生在最后一个位置 , 不能在其后面再跟一个逗号 。
注意其余字段可以表示所有字段:
结构体与元组一样 , 可以被解构 。 例如一个有效的 let 模式:
让 let 模式在 if 里可以作为条件:
多分支的 match 也是条件模式 , 就像 if let:
match 必须是囊括所有情况的的:至少需要匹配一个条件分支 。
如果非常难实现 , _那么可以作用一个“包罗万象”的模式:
Type 别名
我们可以使用 type 关键字声明另一类型的别名 , 然后就可以像使用一个真正的类型一样使用这种类型 。 例如定义 Name 这种数据类型为字符串 , 后面就可以直接使用 Name 这种类型了 。
你可以在方法中声明不同的数据类型:
然后就如同往常那样使用:
默认情况下 , 声明变量后它就就是不可变的 , 如下 odd 不能被重新赋值:
不可变的变量声明 , 其内部也是不可变的 , 它也不能重新分配值:
mut 可以使变量声明变为可变的:
Traits 描述的是多种数据类型的共同点:
我们可以在我们定义的 Type 类型中定义 Traits:
外部类型(foreign type)中定义的 Trait:
impl 模块通常会带有一个 Type 类型 , 所以在模块内 , Self 就表示该类型:
有一些traits只是作为标记 , 它们并不是说 Type 类型实现了某些方法 , 它只是表明某些东西能通过Type类型完成 。 例如 , i32 实现了Copy , 那么以下代码就是可行的:
下面的代码也是能运行的:
但是 Number 的结构体并不能用于 Copy , 所以下面的代码会报错:
同样下面的代码也不会 Work:
但是如果print_number有一个不可变reference , 那么 Copy 就是可行的:
如果函数采用了可变reference , 那也是可行的 , 只不过需要在变量声明中带上 mut 。
Copy 这类标记型的traits并不带有方法:
现在 Clone 仍然可以用于:
但是Number的值将不会再移除:
有一些traits很常见 , 它们可以通过使用derive 属性自动实现:
【机器之心:半小时入门Rust,这是一篇Rust代码风暴】看上去 , 整篇教程都在使用大量代码解释 Rust 的各种语句与用法 。 可能我们会感觉博客结构不是太明确 , 但是实例驱动的代码学习确实更加高效 。 尤其是对于那些有一些编程基础的同学 , 他们可以快速抓住 Rust 语言的特点与逻辑 。
最后 , 这篇文章并没有展示博客所有的内容 , 如果读者想真正入门 Rust 语言 , 推荐可以查阅原博客 。
原文地址:https://fasterthanli.me/blog/2020/a-half-hour-to-learn-rust/
本文为机器之心编译 , 转载请联系本公众号获得授权 。
------------------------------------------------
推荐阅读
- 『机器人』日本一大学举行云毕业典礼:机器人替身领毕业证
- 「中国电信」中国电信携手海思、长虹联合开展5G机器视觉“端边云”协同创新
- #广州零点一度#专业全自动一次性口罩机器厂家——零点一度
- 真的会有报复性消费吗?猎豹移动机器人大数据告诉你
- 『环球Tech』中国电信携手海思、长虹联合开展5G机器视觉“端边云”协同创新
- 「深扒娱乐圈圈」可拆卸式柔性保温套功不可没!,显著减少机器热损失
- #环球Tech#中国电信携手海思、长虹联合开展5G机器视觉“端边云”协同创新
- 智能家居混战再度升级,华为与360联手进军扫地机器人市场
- #磐石之心#罗永浩直播带货的最大输家是搜狗么?
- 『南方Plus客户端』融资近亿元!松山湖这家企业专注研发清洁机器人
