Rust语言

2020 Rust 入门 (1)

2020-04-08  本文已影响0人  zidea
rust_logo.jpg

我们身边人知道 Rust 这门语言并不多,那么今天就来给大家介绍一下Rust 。大家可能最关心的是学了 Rust 能够干什么

呵呵一下子扩宽你的路子了

官网提供一本book,通过做书中 demo 来简单介绍一个,难得找到一个可以 cpp 较量一下语言。之前一直以为要做底层就必须学习 cpp 现在终于有了新的选择 Rust。Rust 安装准备单拿出来说一说,还是需要费一番力气的。可以自己找一下安装的教程,紧靠官方好像有点问题。一门好的语言标配是有一个项目管理工具,javascript 之所有这么火也是离不开 npm 的好用。

rust 也提供自己包管理工具 cargo,创建项目语句如下

cargo new guess_game

IDE 用 Visual studio code

先写一个 Hello World,第一眼就看出点现代语言的气息。fn 表示这门语言应该是简洁想到了 go println 还有点 python 味道。

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

我们看一看项目结构吧,也是比较简洁

[package]
name = "guess_game"
version = "0.1.0"
authors = ["zhangyv <zidea@163.com>"]
edition = "2018"

[dependencies]

简单描述这个游戏,就是一个猜数字的游戏。许多语言的入门教程也采用过这个消息。在一定范围内生产一个随机数字。然后玩家输入一个数字,给出提示您输入数字与目标数字大小关系,然后玩家根据提示继续猜数字直到猜中为止。

use std::io;

fn main() {
    println!("Guess the number!");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin().read_line(&mut guess)
        .expect("Failed to read line");

    println!("You guessed: {}", guess);
}

创建字符串,这里 mut 表示是一个可变变量

let mut guess = String::new();
io::stdin().read_line(&mut guess)
        .expect("Failed to read line");

将用户输入写入引用变量 guess

在 Visual Studio code 只要鼠标悬停在方法,就给出提示还是很友好,可能还有强大的 IDE,这里还是比较喜欢 VSCode , 继续努力,用 vim 来写 rust 下一个目标

pub fn expect(self, msg: &str) -> T
Unwraps a result, yielding the content of an Ok.

Panics
Panics if the value is an Err, with a panic message including the passed message, and the content of the Err.

Examples
Basic usage:

let x: Result<u32, &str> = Err("emergency failure");
x.expect("Testing expect"); // panics with `Testing expect: emergency failure`


[dependencies]
rand = "0.5.5"
fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1, 101);

    println!("The secret number is: {}", secret_number);

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin().read_line(&mut guess)
        .expect("Failed to read line");

    println!("You guessed: {}", guess);
}
let secret_number = rand::thread_rng().gen_range(1, 101);

调用 rand 提供的 gen_range 方法来生产随机数一个 1 到 101 之间随机数,

use std::io;
use std::cmp::Ordering;
use rand::Rng;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1, 101);

    println!("The secret number is: {}", secret_number);

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin().read_line(&mut guess)
        .expect("Failed to read line");
    
    let guess: u32 = guess.trim().parse()
        .expect("Please type a number!");

    println!("You guessed: {}", guess);

    match guess.cmp(&secret_number) {
        Ordering::Less => println!("Too small!"),
        Ordering::Greater => println!("Too big!"),
        Ordering::Equal => println!("You win!"),
    }
}

match 有点类似与 switch 应该流行语言的影子,在 kotlin 中好像看到过,随后详细解释如何使用 match 估计支持正则吧和 lambda 表达式。


use std::io;
use std::cmp::Ordering;
use rand::Rng;

fn main() {

    let secret_number = rand::thread_rng().gen_range(1, 101);
    println!("Guess the number!");
    println!("The secret number is: {}", secret_number);
    
    loop{
    
        println!("Please input your guess.");
    
        let mut guess = String::new();
    
        io::stdin().read_line(&mut guess)
            .expect("Failed to read line");
        
        let guess: u32 = guess.trim().parse()
            .expect("Please type a number!");
    
        println!("You guessed: {}", guess);
    
        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => println!("You win!"),
        }
    }
}

这里使用 loop 循环执行代码,我们生成随机数语句从循环体中拿出来,如果每一次都随机生产随机数,这里游戏就没法玩了。接下来我们要解决问题是,当玩家输入非数字时,例如字符串,处理回到循环体起始,这里还是说一点 parse()返回一个类,类包换两个接口分别在 OK 方法中得到返回值,发生异常可以在 Err() 方法得到异常信息,这里我们就不接收异常,而直接退回到循环体起始位置。

use std::io;
use std::cmp::Ordering;
use rand::Rng;

fn main() {

    let secret_number = rand::thread_rng().gen_range(1, 101);
    println!("Guess the number!");
    println!("The secret number is: {}", secret_number);
    
    loop{
    
        println!("Please input your guess.");
    
        let mut guess = String::new();
    
        io::stdin().read_line(&mut guess)
            .expect("Failed to read line");
        
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };
            
    
        println!("You guessed: {}", guess);
    
        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}

如果给出正确答案,我们希望推出游戏,这里用 break 语句退出 loop。

Ordering::Equal => {
                println!("You win!");
                break;
            }
上一篇下一篇

猜你喜欢

热点阅读