rust官方书基础部分

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
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容