`
wudixiaotie
  • 浏览: 132895 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rust学习笔记

    博客分类:
  • rust
 
阅读更多

1.rust里绑定变量是let,默认绑定了的变量是不可更改的,所以如果想让变量可变就要加上mut。

let x = 1; let mut y = 2;

2.match 相当于erlang中的case,但是case的每一项后都是分号,但是rust的match却是逗号。

3.match 的每一项最后都要加逗号,但是最后一项不加也不会报错,所有结尾加逗号的用法都是类似。

4.每个语句结尾都要加分号,但是当函数指定了返回值之后,这个函数的最后一个表达式不能加分号,负责会报错。

5.rust中除了两种声明之外其他的都是表达式。第一种声明是绑定声明:let x = 1;它不是表达式,所以没有返回值,所以不能这么写let x = (let y = 1); ,如果对一个已经绑定了德变量赋值,那么这个赋值的语句就是一个表达式,而不是声明,而所有赋值表达式的值都是空元祖 () = (y = 5);

另一种声明就是表达式声明,凡是以分号结尾的表达式都是表达式声明,所以几乎所有的函数内部的语句都是表达式声明,除了下面这种情况:

fn add_one(x: i32) -> i32 {
    x + 1
}

 函数要求德返回值类型是i32,但是如果在x+1后加分号,那么就是个表达式声明,所有的表达式声明的值都是空元祖,所以返回值就是空元祖,所以与返回值类型不一致,所以报错。

 

6.数字类型里的isize和usize,指的是有符号整数和无符号整数。

 

7.let绑定时,就会对绑定的变量进行类型指定,即便是mut绑定,再次重新绑定的时候,类型也必须是第一次绑定的类型。

let mut x = (1, 2); // x: (i32, i32)
let y = (2, 3); // y: (i32, i32)

x = y; //正确

let z = (2, "3");
x = z; //错误,因为x的类型是(i32, i32) z的类型是 (i32, &str)

 

 8.单个元素的元组是这样写:(0,) 而不是(0).

 

9.rust的基本类型只有: bool, arry, numeric, slice, str, tuple, function,7种

 

10.函数指针 : 

fn foo(x: i32) -> i32 { x }

let x: fn(i32) -> i32 = foo;

 

11. 0..10指的是从0到9,不包括10.

 

12. 对于绑定

let b = a;

 来说rust有两中方式,一种是move一种是copy,当一个绑定a是指针时,为了保证消除数据竞争,同一个内存实例只能同时有一个指针指向它,原有的指针a会被销毁,新的指针会b代替原指针指向内存实例。这就是move操作。当a本身就是内存实例的时候(例如 let a= 1;),再次绑定一个变量b到a的时候,b会新创建一个内存实例,这时,a和b分别是两个内存实例,这个操作就是copy。到底是执行move还是copy取决于原有绑定的类型。

 

13. 关于引用:

引用有两种一种是&T一种是&mut T,两种引用在同一个作用域中不能同时存在,在同一个作用域中只能存在下列情况中的一种:

1)  0个或者多个&T

2)  0个或者1个&mut T

一个引用的生命周期和被引用的变量一样,所以如果变量提前结束生命周期,那么引用也是无效的了。如果引用定义在了变量之前,也会出现这种问题,因为有效的引用必须是指向一个内存地址的:

let y: &i32;
let x = 5;
y = &x;
println!("{}", y);

 14.不同的字符串在程序中只有一份,“a”这个字符串只在heap中存一份。

分享到:
评论

相关推荐

    Rust 学习笔记.zip

    Rust 学习笔记.zip,关于锈语的注记

    Rust学习笔记_78实用知识库分享

    资源Rust学习笔记_78实用知识库分享知识分享

    Rust语言学习笔记.pdf

    这份学习笔记是在学习Rust的过程中的记录,主要基于《Rust程序设计语言-简体中文版》和《RustPrimer》两份开源书籍。 上面两本书籍相对全面但对部分初学者可能更为深奥一些,尤其是之前没有接触过C/C++ 和Rust语言...

    learning-rust:Rust语言学习笔记

    Rust学习笔记内容介绍Rust 是一种安全、并发、实用的编程语言,有着惊人的运行速度,能够防止段错误,并保证线程安全, 能够构建可靠高效的软件。访问方式这是个人学习Rust的笔记,请点击下面的链接阅读::hugo格式,...

    Rust新手学习笔记,主要记录一些常见的编程例子和Rust库的基本使用

    Rust新手学习笔记,主要记录一些常见的编程例子和Rust库的基本使用

    Rust语言学习笔记1

    声明的:其中变量类型如 i32 一般都是可以省略的,因为Rust使用了类型推断Rust还通过模式匹配 (pattern matching) 对变量进行解构,这允

    笔记、Laravel、PHP、面试题、MySQL、HTML、CSS、Java

    笔记文摘 用 markdown 书写的笔记(部分来源于互联网),共享出来给大家!...Rust 学习笔记及示例代码: Learning Rust 。 Bash 相关: 本人翻译的 Bash 中文指南 ,不错的 linux bash 命令入门材料。 Vue 相关: Vu

    笔记,Laravel、PHP面试题,MySQL, HTML, CSS, Java。

    Rust 学习笔记及示例代码: 。 Bash 相关: 本人翻译的 ,不错的 linux bash 命令入门材料。 Vue 相关: Vue.js 学习示例及笔记: 。 JAVA 相关: 学习 Java 示例及笔记: Simple restful API service Demo: ...

    inviting-rust-note:Rust实战课程笔记

    Rust实战课程笔记课程链接: 我的Rust学习经历:Rust入门资料Rust入门书目录08 | 语法面面观:面向表达式(下) 09 | 语法面面观:数据类型 (上)10 | 语法面面观:数据类型 (下)11 | 语法面面观:函数与闭包(上)...

    my_rust_road:这是我的研究锈回购

    我的锈路这里是我学习Rust后的一些留存Rust学习笔记 :ledger:Git学习笔记 :ledger:Rust中的清单过多 :ledger:设计模式自制搜索引擎 :magnifying_glass_tilted_left:Rust刷算法题(翻译)rust设计模式

    用 Rust 编写的简单自动点击器,用于学习 Rust 语言。

    RClicker是我为了学习更多关于 Rust 编程语言而编写的。如果您愿意,您可以打开PR以添加更多支持和/或清理代码。特征这个自动点击器目前非常准系统,它目前包括:最大/最小 CPS(向上/向下箭头更改)切换自动点击器...

    Rust 机器学习框架。

    linfa旨在提供一个全面的工具包来使用 Rust 构建机器学习应用程序。在精神上与 Python 的scikit-learn相似,它专注于日常 ML 任务的常见预处理任务和经典 ML 算法。文档:最新的社区聊天:Zulip当前状态linfa现在站...

    学习Rust生态:了解流行的库与框架

    介绍了Rust编程语言的流行库与框架,包括标准库、Cargo、Serde、Tokio、Tide、Diesel、Actix-Web等。这些工具和框架涵盖了从基本数据类型和集合到网络编程、异步处理、数据库访问等各个方面。文章通过实际应用场景和...

    rust-notes:学习笔记

    锈迹 目录

    Marko Editor是一个简单的WYSIWYG编辑器,用于记笔记。-Rust开发

    Marko Editor是一个简单的WYSIWYG编辑器,用于用Rust和GTK 4编写笔记。...背景Marko Editor是一个学习项目,由我的个人笔记需求驱动。 来自C ++和Qt背景,这是我第一次更深入地研究Rust和GTK。 所以你应该期待一些缺点

    eg_stm_hal:新手笔记-使用嵌入式Rust HAL的示例

    这是我尝试整理在试图弄清楚Rust /嵌入式时所做的笔记的尝试。 CI用于帮助跟踪工作正常与否。 此处的示例和注释可能对他人有用。 Web上有很多令人困惑的过时信息,因此我希望,当此项目变旧或崩溃时,CI链接将警告...

    rust中的 Shor算法(量子模拟)_rust_代码_下载

    这个想法来自我目前学习的课程(PHYS 498 计算物理学),我们在脚本语言中实现了 Quantum Shor 算法(教授使用 python,而我使用 typescript)。一般的逻辑已经在 typescript 和(Zhaiyuqing2003/Quantum_Shor_...

    rust-practice:防锈实践

    Rust语言学习笔记 摘录片段: Rust代码非常接近自然语言。 5.times(|| println!("Hello Rust")); 2.days().from_now(); Rust一切皆表达式。 闭包 闭包语法:由管道符和花括号组合而成。管道符里是闭包函数的参数,花...

    Awesome-Rust-MachineLearning:很棒的Rust Machine Learning板条箱列表

    出色的锈蚀机器学习 很棒的Rust Machine Learning板条箱列表,其编写目的是从Python迁移。 这是一个列表,其中主要项目位于顶部。 总目录 起落架 Jupyter笔记本 -Rust的评估环境。 生锈的Jupyter扩展。 阴谋 -...

    open_cl_rust:Rust 中的 OpenCL 绑定

    学习资源 笔记注意:OpenCL 1.0 不是线程安全的。 我们不会支持它。 注意:调查有关 OpenCL 的num crate 的数量和安全性的 OpenCL 限制。 注意:实施采样器。 注意:为(clCreateUserEvent,clSetUserEventStatus)...

Global site tag (gtag.js) - Google Analytics