[易学易懂系列|rustlang语言|零基础|快速入门|(11)]

有意思的基础知识

Structs

我们今天来看看数据结构:structs.

简单来说,structs,就是用来封装相关数据的一种数据类型。

一般来说, struct 的命名方式为驼峰方式如: CamelCase

在Rust有以下几种定义struct的方式:

  1. C-like structs (C语言形式的struct)
  2. Tuple structs (元组形式的struct)
  3. Unit structs (单元struct)

在Rust,面向对象抽象,一般由struct和trait(特征)来实现,即structs来

封装属性数据,而trait用来封装方式,再由impl来关联。

我们来看看代码:

C语言形式的struct

// Struct Declaration
struct Color {
red: u8,
green: u8,
blue: u8
} fn main() {
// Creating an instance
let black = Color {red: 0, green: 0, blue: 0}; // Accessing its fields using dot notation
println!("Black = rgb({}, {}, {})", black.red, black.green, black.blue); //Black = rgb(0, 0, 0) // Structs are immutable by default, use `mut` to make it mutable but doesn't support field level mutability
let mut link_color = Color {red: 0,green: 0,blue: 255};
link_color.blue = 238;
println!("Link Color = rgb({}, {}, {})", link_color.red, link_color.green, link_color.blue); //Link Color = rgb(0, 0, 238) // Copy elements from another instance
let blue = Color {blue: 255, .. link_color};
println!("Blue = rgb({}, {}, {})", blue.red, blue.green, blue.blue); //Blue = rgb(0, 0, 255) // Destructure the instance using a `let` binding, this will not destruct blue instance
let Color {red: r, green: g, blue: b} = blue;
println!("Blue = rgb({}, {}, {})", r, g, b); //Blue = rgb(0, 0, 255) // Creating an instance via functions & accessing its fields
let midnightblue = get_midnightblue_color();
println!("Midnight Blue = rgb({}, {}, {})", midnightblue.red, midnightblue.green, midnightblue.blue); //Midnight Blue = rgb(25, 25, 112) // Destructure the instance using a `let` binding
let Color {red: r, green: g, blue: b} = get_midnightblue_color();
println!("Midnight Blue = rgb({}, {}, {})", r, g, b); //Midnight Blue = rgb(25, 25, 112)
} fn get_midnightblue_color() -> Color {
Color {red: 25, green: 25, blue: 112}
}

元组形式的struct

struct Color(u8, u8, u8);
struct Kilometers(i32); fn main() {
// Creating an instance
let black = Color(0, 0, 0); // Destructure the instance using a `let` binding, this will not destruct black instance
let Color(r, g, b) = black;
println!("Black = rgb({}, {}, {})", r, g, b); //black = rgb(0, 0, 0); // Newtype pattern
let distance = Kilometers(20);
// Destructure the instance using a `let` binding
let Kilometers(distance_in_km) = distance;
println!("The distance: {} km", distance_in_km); //The distance: 20 km
}

单元struct

struct Electron;

fn main() {
let x = Electron;
}

以上,希望对你有用。

如果遇到什么问题,欢迎加入:rust新手群,在这里我可以提供一些简单的帮助,加微信:360369487,注明:博客园+rust

https://learning-rust.github.io/docs/b2.structs.html

最新文章

  1. 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值
  2. JDBC值事务
  3. ERROR LazyInitializationException:19 - failed to lazily initialize a collection of role: com.goodfan.entity.BeanA.beanB, no session or session was closed
  4. Android基于mAppWidget实现手绘地图(三)--环境搭建
  5. POJ 1236 Network of Schools(强连通分量/Tarjan缩点)
  6. jqGrid预定义的格式化类型formatter
  7. java线程详解(二)
  8. PHP类与继承
  9. js截取小数点后几位的写法
  10. Apache XAMPP Fails to start under Windows XP
  11. 关键字explicit
  12. wafer
  13. WEB安全入门
  14. Python随笔--继承
  15. The declared package does not match the expected package Java
  16. AJAX+springmvc遇到的问题
  17. Python常用模块time & datetime &random 模块
  18. 【工具相关】Web-HTML特殊字符对照表
  19. 使用jquery-combobox实现select下拉框多选之后,如何将下拉框的值传给input隐藏域
  20. 转:控制ComboBox下拉框的下拉部分宽度,使内容能够显示完全

热门文章

  1. JavaScript日常学习4
  2. Cinder 架构分析、高可用部署与核心功能解析
  3. 基于 Node.js 的服务器自动化部署搭建实录
  4. dapper 分页根据时间条件查询时中的一个坑
  5. java:maven(maven-ssm(聚合,分包开发))
  6. Windows Server 2008 R2忘记管理员密码后的解决方法
  7. Oracle 查看 impdp 正在执行的内容
  8. 面试题 | 数据库笔试题集合·之·SQL语句(2)
  9. bootstrap modal 闪退的办法
  10. json格式和对象类型的转换20170330