Rust学习

// 代码是从后往前的,因为懒得往下翻来翻去,所以你可能需要从最底下看起,如果你要看的话

//fn gives_ownership() -> String {
//    let s = String::from("hello");
//    return s;
//}
//
//fn takes_and_gives_back(str :String) -> String {str}

//fn add (a: i32,b :i32) -> i32 {
//    return a+b;
//}

//fn moveStr(str:String) {
//    println!("str:{}",str);
//}
//fn copyBase(val:i32) {
//    println!("val:{}",val);
//}
//

//fn calc_len(s :&String) -> usize {
//    return s.len()
//}

// 返回引用,不返回本身,函数结束,本身destory 引用还有个屁用,报错,rust 不允许
//fn dangle() -> &String {
//    let s = String::from("hello");
//    &s
//}

//struct Site {
//    domain: String,
//    name: String,
//    nation: String,
//    found: u32,
//}

fn main() {
    //println!("Hello, world!");

    struct Color(u8, u8, u8);
    struct Point(f64, f64);

    let black = Color(0, 0, 0);
    let origin = Point(0.0, 0.0);
    println!("boack = ({},{},{})", black.0, black.1, black.2);
    println!("origin = ({},{})", origin.0, origin.1);

    //let vv = Site {
    //    domain: String::from("kkkkk"),
    //    name: String::from("kkkkk"),
    //    nation: String::from("kkkkk"),
    //    found: 2222,
    //};

    //let val = Site {
    //    // 一部分来自 vv 一部分新的字段
    //    domain: String::from("hhh"),
    //    name: String::from("hhhh"),
    //    ..vv
    //};
    //println!("domain{}", val.domain);
    //println!("name{}", val.name);
    //println!("nation{}", val.nation);
    //println!("fount{}", val.found);

    //被切片引用的字符串禁止更改其值
    //let mut s = String::from("runoob");
    //let slice = &s[0..3];
    //s.push_str("yes!"); // 错误
    //println!("slice = {}", slice);

    //let s = String::from("broadcast");
    //let part1 = &s[0..5];
    //let part2 = &s[5..9];
    //println!("{}={}+{}",s,part1,part2);

    //let reference_to_nothing = dangle();

    // err 多重引用
    //let mut s = String::from("hello");
    //let r1 = &mut s;
    //let r2 = &mut s;
    //println!("{}, {}", r1, r2);

    //let mut s1 = String::from("hello");
    //// s1 是可变的
    //let s2 = &mut s1;
    //// s2 是可变的引用
    //s2.push_str(" world");
    //println!("{}", s2);

    //let s1 = String::from("run");
    //let s2 = &s1;
    //println!("{}", s2);
    //s2.push_str("oob"); // 错误,禁止修改租借的值
    //println!("{}", s2);

    //let s1 = String::from("hello");
    //let mut s2 = &s1;
    //println!("s2 is {}",s2);
    //let s3 = s1;
    //println!("s3 is {}",s3);
    //println!("s2 is {}",s2); // err s1 is dead so s2 is dead
    //s2 = &s3;
    //println!("s2 is {}",s2);  // success beacuse s2 reset

    //let s1=  String::from("hello");
    //let s2 = &s1;
    //println!("s1 is {},s2 is {}",s1,s2);
    //println!("s1 len = {}",calc_len(s2));

    //let s1 = gives_ownership();
    //println!("gives_ownership:{}",s1);
    //let s2  = String::from("just back");
    //let s3 = takes_and_gives_back(s2);
    //println!("takes_and_gives_back:{}",s3);

    //let s = String::from("hello");
    //moveStr(s);
    //print!("str:{}",s); // err, bacause str save heap, send to fn s is dead!
    //let val:i32 = 5;
    //copyBase(val);
    //println!("val:{}",val); // ok, baeause baseValType save in stack
    //let s1 = String::from("hello ");
    //let s2 = s1;
    //println!("{} world!",s1); // err, because s1 is dead  s2(ptr)-> hello  move
    //println!("{} world!",s2);

    //let s1 = String::from("hello ");
    //let s2 = s1.clone();
    //println!("{} world!",s1); // ok , because s1->oldStr s2-> newStr
    //println!("{} world!",s2);

    //let s = [
    //    'R',
    //    'U',
    //    'N',
    //    'O',
    //    'V',
    //    'B'
    //];

    //let mut i = 0;
    //loop {
    //    let ch =s[i];
    //    if ch == 'V' {break;}
    //    println!("\'{}\'",ch);
    //    i+=1;
    //}

    //i = 0;
    //let location = loop {
    //    let ch = s[i];
    //    if ch == 'O' {
    //        break i;
    //    }
    //    i+=1;
    //};
    //println!("\'O\' index:{}",location);

    //let a = [10,20,30,40,50];
    //for i in 0..5 {
    //    println!("a[{}] = {}",i,a[i]);
    //}

    //let a = [10,20,30,40,50];
    //for i in a.iter() {
    //    println!("val : {}",i);
    //}

    //let mut number = 1;
    //while number != 4 {
    //    println!("{}",number);
    //    number += 1;
    //}
    //println!("EXIT");

    //let a = 3;
    //let number = if a > 0 {1} else {-1};
    //print!("number = {}\n",number);

    //let number = 3;
    //if number < 5 {
    //print!("true\n");
    //} else {
    //print!("false\n");
    //}

    //let a = 12;
    //let b;
    //if a > 0 {
    //b = 1;
    //}else if a < 0 {
    //b = -1;
    //} else {
    //b =0;
    //};
    //println!("a = {} ,b = {}\n",a,b);

    //fn five() -> i32 {
    //    -1
    //}
    //println!("five() => {}",five());

    //let x = 5;
    //let y = {
    //    let x = 3;
    //    x+1
    //};
    //print!("x = {}\n",x);
    //print!("y = {}\n",y);

    //println!("add:{}",add(1,3));

    //let tup:(i32,f64,u8) = (500,6.4,1);
    //let (x,y,z) = tup;

    //let a = [1,2,3,4,5];
    //let b = ["hello","world","rose"];
    //let c: [i32;5] = [1,2,3,4,5];
    //let d = [3;5];
    //let first = a[0];
    //let second = [1];

    //let sum = 5+10;
    //let difference = 95.5-4.3;
    //let product = 4*30;
    //let quitient = 56.7/32.2;
    //let remainder = 43%5;
    //println!("sum is {}",sum);
    //println!("difference is {}",difference);
    //println!("product is {}",product);
    //println!("quitient is {}",quitient);
    //println!("remainder is {}",remainder);

    //let x = 2.0;
    //let y:f32 = 3.0;
    //println!("x  {} ",x);
    //println!("y  {} ",y);
}

posted @ 2020-05-22 21:31  NorseLZJ  阅读(180)  评论(0编辑  收藏  举报