Rust 所有权、结构体 + ink! 智能合约
一、Rust 的所有权
Rust 的所有权概念使得在对 rust 的数据进行操作时需要数据的所有权,不然会引起一定的错误。所有权与作用域相对于,当我把一个值赋予 x 时,在进行 y = x 语句则会把 x 的值所有权移交给 y 除非使用 &x 引用概念。
这里需要区分整形和 String 类型的区别,具体的图解可以参看官方 Rust 文档,这使得存在了变量与数据交互的两种方式:移动、克隆,不同的操作,值的归属权不同,操作也有对应的不同。
二、引用
& 符号就是引用,它们允许你使用值但不获取其所有权,这种方式用于对数值进行使用但不进行修改的情况。
当然,通过 mut 可以将引用变成可变引用,但一般使用多个不可变引用最好。
三、Slice
Slice 可以实现对 String 类型或数组的细节操作,细节使用可以参看官方文档。
这里给出所有权 + 引用 + Slice 的代码示例,相关例子可以在此代码中验证:
fn main() {
let s = String::from("hello");
takes_ownership(&s);
println!("second:{}",s);
let (s_2, len) = calculate_length(s);
println!("The length of '{}' is {}", s_2, len);
let x = 5;
makes_copy(x);
let z = String::from("hello world");
let hello = &z[0..5]