当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

rust学习笔记

发表于: 2015-07-04   作者:wudixiaotie   来源:转载   浏览:
摘要: 1.rust里绑定变量是let,默认绑定了的变量是不可更改的,所以如果想让变量可变就要加上mut。 let x = 1; let mut y = 2; 2.match 相当于erlang中的case,但是case的每一项后都是分号,但是rust的match却是逗号。 3.match 的每一项最后都要加逗号,但是最后一项不加也不会报错,所有结尾加逗号的用法都是类似。 4.每个语句结尾都要加分

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学习笔记

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在Rust中,你并不需要自己调用像 malloc 和 free 这样的函数:编译器静态决定何时你需要分配和销毁
我学习Rust的目的并不是说期望用它来取代掉现有的开发平台或语言。相反,我认为当前绝大部分研发团
这个看起来是一个很小的问题,我们如果是在.NET里面的话,很简单地可以直接使用System.DateTime.Now
Rust 1.0.0-alpha 即将释出 发行说明和参考资料: Version 1.0.0-alpha (January 2015) -----------
今天Rust 1.0.0-alpha 按计划如期释出。 有几个地方或以帮助大家感受这一门语言 1、官方提供的《A 3
Mozilla 是一家已开发工具和驱动,基于web开发标准来让人熟知的。 最著名的是他们的旗舰产品火狐游
最近在研究Rust这个新的语言。那么Rust是什么呢? Rust是一个注重安全与速度的现代系统编程语言,通
在Rust中,如果要进行屏幕输出,或者写入到文件中,需要对数据进行格式化。这一篇总结一下它所支持
在rust.cc社区中有一个关于rust编辑器的讨论(话说很多人要学一个新语言,都会立即考虑编辑器的问题
上一篇文章,我们通过实例比较了一下C#和Rust的性能表现,应该说在Release模式下面,Rust进行计算密
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号