Jabbi的Rust学习日记(二)

特征:

就目前我学习到的rust知识来看,我认为rust有以下几个特征:

  • 链式调用
  • 表达式
  • 强类型

use

使用use导入包,我觉得rust的导包和python的很像

main

main函数是rust可执行程序最先执行的代码,可以说是程序的入口,在golang中也是,我学过的语言好像都是这样

这个println好像不是函数,因为加了 ' ! '听说是叫宏的一个东西,目前还不知道,后续应该会学习到

rust 复制代码
fn main(){
    println!("hello rust");
}

let

let是rust给变量赋值?看了rust圣经,准确来说好像应该是绑定,rust中的变量存在两个概念

可变变量,不可变变量

可变变量: let mut guess = String::new();

mut是声明其为可变

不可变:同理就是少个mut

区别:不可变变量除了声明的时候能够绑定值,其余时刻不能,可变变量则可以

rust中的输入输出

需要导入包std::io,没导入调用io时候要加入std::

rust 复制代码
io::stdin().read_line(&mut guess).
    expect("error happend");

expect

expect是rust中的一个错误处理

read_line()会返回一个io::Result,这是一个枚举enum类型,返回ok或者err,expect就是为了捕获错误,如果返回ok则执行接下来的代码,类似panic,会直接结束进程

match

有点像golang以及其他语言的switch,可以对枚举值进行switch,比如上面的错误处理就可以用match进行更加优雅的处理,毕竟直接panic有点不够健壮

这是最后代码的截断,类似这种处理,这里的**=>** 有点类似golang中switch的 :?

rust 复制代码
let guess:u32 = match guess.trim().parse(){
        Ok(num) => num,
        Err(_) => {
            println!("error happen");
            continue;
        },
    };

cmp

cmp是变量的一个方法,可以直接调用,但是比较的话要用相同类型,emmm

rust中的变量类型有点迷,是真的会变,值会变,类型也会变,好智能

cmp可能需要导入这个包std::cmp::Ordering,Ordering也是个枚举类型包含大于小于等于,用于match的时候使用

loop

循环,目前还没有深入学习

例子

下面是一个例子:猜数字

rust 复制代码
use rand::Rng;#用于生成随机数
use std::io;
use std::cmp::Ordering;



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

    let secret_number = rand::thread_rng().
    gen_range(1, 101);
    println!("secret_number is:{}",secret_number);
    
    loop {
        let mut guess = String::new();// 将guess绑定一个字符串变量
    println!("input a number:");
    io::stdin().read_line(&mut guess).// 输入数字
    expect("error happend");

    println!("the guess number is:{}",guess);
    let guess:u32 = match guess.trim().parse(){// 将guess的值转化为整型重新绑定
        Ok(num) => num,
        Err(_) => {
            println!("error happen");
            continue;
        },
    };
    // expect("parse error:type u32");
    match guess.cmp(&secret_number){// 前面说的match cmp
        Ordering::Less => println!("To small"),
        Ordering::Greater => println!("To large"),
        Ordering::Equal =>{
            println!("success");
            break;
        },
    }
}
}
相关推荐
晨非辰1 小时前
#C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!
c语言·开发语言·经验分享·学习·visual studio
xiaoxiaoxiaolll2 小时前
期刊速递 | 《Light Sci. Appl.》超宽带光热电机理研究,推动碳纳米管传感器在制药质控中的实际应用
人工智能·学习
励志码农3 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet
天高云淡ylz3 小时前
子网掩码的隐形陷阱:为何能ping通却无法HTTPS访问
开发语言·php
DisonTangor3 小时前
字节开源 OneReward: 通过多任务人类偏好学习实现统一掩模引导的图像生成
学习·ai作画·开源·aigc
黎宇幻生4 小时前
Java全栈学习笔记33
java·笔记·学习
2501_926227944 小时前
.Net程序员就业现状以及学习路线图(五)
学习·.net
希望20175 小时前
Golang Panic & Throw & Map/Channel 并发笔记
开发语言·golang
朗迹 - 张伟5 小时前
Golang安装笔记
开发语言·笔记·golang
yzx9910135 小时前
生活在数字世界:一份人人都能看懂的网络安全生存指南
运维·开发语言·网络·人工智能·自动化