1.控制流
fn main() {
let x: i32 = 1;
{
let y: i32 = 1;
println!("x = {}", x);
println!("y = {}", y);
}
{
let s1 = String::from("hello");
println!("s1 = {}", s1);
let s2 = s1;
println!("s2= {}", s2);
let s3 = s2.clone();
println!("s3= {}", s3);
println!("s2= {}", s2);
}
控制权
fn takes_ownership1(some_string: String){
println!("{}", some_string);
}
fn takes_ownership2(some_string: String) -> String{
println!("{}", some_string);
some_string
}
fn makes_copy(i: i32) {
println!("i = {}", i);
}
fn main() {
let s = String::from("hello");
let s2 = takes_ownership2(s);
println!("{}", s2);
let x = 5;
makes_copy(x);
println!("{}", x);
println!("Hello, world!");
}
2.引用
fn calcute_length(s: &String) ->usize {
s.len()
}
fn modify_s(s: &mut String) {
s.push_str(", world");
}
fn dangle() -> &String {
let s = String::from("hello");
&s
}
fn main() {
let mut s1 = String::from("hello");
let r1 = &s1;
let r2 = &s1;
println!("{}, {}", r1, r2);
let r3 = &mut s1;
r3.push_str(", world");
}
Slice
fn main() {
let s = String::from("hello world");
let h = &s[0..5];
let h = &s[0..=4];
let h = &s[..=4];
let h = &s[..5];
println!("h = {}", h);
let w = &s[6..11];
let w = &s[6..=10];
let w = &s[6..];
let w = &s[..];
println!("w = {}", w);
let a = [1, 2, 3, 4];
let sss = &a[1..3];
println!("sss = {}", sss[0]);
println!("sss = {}", sss[1]);
println!("len = {}", sss.len());
}