// 代码是从后往前的,因为懒得往下翻来翻去,所以你可能需要从最底下看起,如果你要看的话
//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);
}