新贵Rust (2)—Ownership

Rust 的 ownership 系统是他的最主要的特征。只有理解了ownership系统,才能真正算是入门。

&str 是一个由 Rust 语言实现的原生类型,而 String 则是由标准库实现的。

图中的 s 变量是&str,不是String

8207483-f6b2c19c4571de00

String 则是由标准库实现的。通过 String:: from 可以创建字符串类型的变量。

8207483-df33589f33bf420e
8207483-7ffc9607022ecf17
8207483-13a5ae73de64b0c8
8207483-26202a237288aeb2

字符串类型的拼接。(self,&w

8207483-b262bc89b4adc028

Rust 的绑定变量有一个属性:获得它所绑定资源的所有权。这意味着当绑定变量超出作用域时,它所绑定资源的资源就会释放。

有一点要注意:Rust确保有且只有一个变量绑定到给定的资源

8207483-5fbac0218a1d9722

不过我们可以借,使用&添加在 s 变量前

8207483-58cce9fb9849305f

我们写了函数 take ,以 vector 为参数,调用函数 take 时将 v 的owership 传递给函数中 v,这就是 moving 。

8207483-c1ef15aa14ee3709

因为这个例子里 a,b 的类型是i32,它实现了 copy trait,所以 cop(a,b) 这行代码执行时,rust会把a,b的值深度copy一份来用于。

8207483-51562c6d2473abc4

我们写了一个 re 函数,以vector为参数,为了能让函数调用后, 原来的变量能正常使用,我们必须手动归还这个ownership。(见函数 re)

在Ownership一节,我们给出了一个手动归还Ownership例子,手动归还实在太不方便。Rust使用reference 来解决这个问题。这是reference版本的。(见函数 borrow1,borrow2)

8207483-e4dbac2797732144

用 struct 可以定义一定的数据结构,然后 impl 可以理解为继承或扩展,使用 impl 可以为 struct 数据结构添加方法。

8207483-7e60b9dbfd6fb592
8207483-695edda5a87cce2b
8207483-8c3cb7afab8a3253
8207483-4f87affba06a592a
8207483-00521a39adfde35f

猜你喜欢

转载自blog.csdn.net/weixin_33681778/article/details/86797410