rust官方書基礎(chǔ)部分

rust官方的猜字游戲

struct User {
    username :String,
    email:String,
    sign_in_count: u64,
    active:bool,
}

fn build_user(email: String, username: String) -> User {
    User {
        email,
        username,
        active: true,
        sign_in_count: 1,
    }
}

#[derive(Debug)]
struct PPP {
    w: u32,
    h: u32,
}
impl  PPP {
    fn new(w :u32, h :u32) ->  PPP {
         PPP{w:w, h:h}
    }
    fn area(&self) -> u32 {
        self.w * self.h
    }
    fn campare(&self, other: &PPP) -> bool {
        self.area() > other.area()
    }
}


enum IpAddrKind {
    V4,
    V6
}
struct IpAddr {
    kind:IpAddrKind,
    address:String,
}

enum IpAddrV2 {
    V4(u8,u8,u8,u8),
    V6(String),
}



enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}

fn main() {

    let x = 123;
    println!("{x}");
    let x = 456;
    println!("{}", x);
    let mut x = 758;
    x = 111;
    println!("{}", x);

    const MAX_POINTS: u32 = 100_000;
    println!("MAX_POINTS:{}", MAX_POINTS);
    
    let y :i64 = 12;
    let mut x :i32 = y as i32;
    x  = 0xff;
    println!("x:{}", x);
    let x :f32 = 12.12;
    println!("{}", x);

    let b:bool = true;
    println!("b={}", b);

    let tup1 :(i32,i64,u8) = (1,2,3);
    println!("tup1={:?}", tup1);
    let arr = [1,2,4,5];
    println!("arr={:?}", arr);
    let arr2 :[f32;5]= [1.1,2.2,2.3,4.1,5.2];
    println!("arr={:?}", arr2);

    //func 
    let x :i32= 123;
    afunc(x);

    println!("func1 {}", addOne(x));

    if x > 3 {
        println!("big then 3");
    }else if (x > 4) {
        println!("small then 4");
    }else {
        println!("small then 3");
    }

    let number = if x > 3  {
        true
    } else {
        false
    };
    println!("number={}", number);

    let mut x = 1;
    loop {
        
        if x > 3 {
            break;
        }
        x = x + 1;
        println!("again!");
    }

    while x < 6 {
        x = x + 1;
        println!("again!");
    }

    for elem in arr.iter() {
        println!("elem={}", elem);
    }

    for elem in (1..4).rev() {
        println!("rev={}", elem);
    }


    {
        let xxx = 1;
        println!("inner xxx={}", xxx);
    }
    //println!("xxx={}", xxx);

    let mut str1 = String::from("hello");
    str1.push_str(" world!");
    println!("{}", str1);
    let str2 = str1;
    println!("str2:{}", str2);
    //clone
    let str3 = str2.clone();
    println!("str2:{}", str2);
    println!("str3:{}", str3);


    let str11 = String::from("hello");
    let str12 = setStr(str11);
    //println!("str11:{}", str11);
    println!("str12:{}", str12);

    /**
     * 在任意給定時間背捌,要么 只能有一個可變引用狐胎,要么 只能有多個不可變引用溪椎。
引用必須總是有效的。
     */
    //add str
    let mut str13 = String::from("abc");
    addStr2(&mut str13);
    println!("str13={}", str13);

    let str14 = &str13[0..5];
    let str15 = &str13[5..8];
    println!("str14={} {}", str14,str15);

    println!("all={}", &str13[..]);

    let user1 = User{
        username :String::from("xxx"),
        email:String::from("xxx@126.com"),
        sign_in_count: 41,
        active:true,
    };

    let user2 = build_user(String::from("xxx"),String::from("xxx@126.com"));
    println!("user1.name={}", user1.username);
    println!("user2.name={}", user2.username);


    struct Color(i32, i32, i32);
    struct Point(i32, i32, i32);
    let black = Color(1, 2, 3);
    let origin = Point(11, 12, 13);
    println!("point1={:?} {:?}", black.0,origin.0);

    let ppp1 = PPP::new(11,12);
    println!("ppp1={:?}, {:?}", ppp1, ppp1.area());

    let ppp2 = PPP::new(12,12);
    println!("ppp2={:?}, {:?}", ppp2, ppp2.area());

    println!("bool={}",ppp1.campare(&ppp2));

    let home = IpAddr {
        kind: IpAddrKind::V4,
        address: String::from("127.0.0.1"),
    };
    println!("home:{}",home.address);
    
    let loopback = IpAddr {
        kind: IpAddrKind::V6,
        address: String::from("::1"),
    };
    println!("home:{}",loopback.address);

    let ipv2 = IpAddrV2::V4(1,2,3,4);

    let some_number = Some(5);
    let some_string = Some("a string");

    let absent_number: Option<i32> = None;

    let coin_one = Coin::Penny;

    let mut count  = 0;
    if let Coin::Penny = coin_one {
        println!("Coin::Penny match");
    } else {
        count += 1;
    }
    println!("count:{}",count);

    let result = value_in_cents(coin_one);
    println!("result:{}",result);

    let some1 = Some(6);
    let some2 = plus_one(some1);
    let none = plus_one(None);

    let some_u8_value = 0u8;
    match some_u8_value {
        1 => println!("one"),
        3 => println!("three"),
        5 => println!("five"),
        7 => println!("seven"),
        _ => (),
    }

}


fn plus_one(x :Option<i32>) -> Option<i32> {
    match x {
        None => None,
        Some(i) => Some(i + 1),
    }
}

fn setStr(str1 : String) -> String{
    str1
}

fn printLen(str :&String) -> usize {
    str.len()
}

fn addStr2(str :&mut String){
    str.push_str(", world");
}


fn afunc(x :i32) {
    println!("func1 {}", x);
}

fn addOne(x :i32) -> i32{
    x + 1
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罩抗,一起剝皮案震驚了整個濱河市炮姨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌栖袋,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抚太,死亡現(xiàn)場離奇詭異塘幅,居然都是意外死亡,警方通過查閱死者的電腦和手機尿贫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門电媳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庆亡,你說我怎么就攤上這事匾乓。” “怎么了又谋?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵拼缝,是天一觀的道長。 經(jīng)常有香客問我彰亥,道長咧七,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任任斋,我火速辦了婚禮继阻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘废酷。我一直安慰自己瘟檩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布澈蟆。 她就那樣靜靜地躺著芒帕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丰介。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天鉴分,我揣著相機與錄音哮幢,去河邊找鬼。 笑死志珍,一個胖子當(dāng)著我的面吹牛橙垢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伦糯,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼柜某,長吁一口氣:“原來是場噩夢啊……” “哼嗽元!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喂击,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤剂癌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翰绊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佩谷,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年监嗜,在試婚紗的時候發(fā)現(xiàn)自己被綠了谐檀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡裁奇,死狀恐怖桐猬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刽肠,我是刑警寧澤溃肪,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站五垮,受9級特大地震影響乍惊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜放仗,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一润绎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诞挨,春花似錦莉撇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至银室,卻和暖如春涂佃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜈敢。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工辜荠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抓狭。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓伯病,卻偏偏與公主長得像,于是被迫代替她去往敵國和親否过。 傳聞我的和親對象是個殘疾皇子午笛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容