Rust 不算是面向对象的语言

一些简单的入门Demo

直接计算最大公约数

pub fn gcd(mut n: u64, mut m: u64) -> u64 {  
    assert!(n != 0 && m != 0);  
    while m != 0 {  
        if m < n {  
            // 可以类型推导  
            let t = m;  
            m = n;  
            n = t;  
        }  
        m = m % n;  
    }  
    // 最后一个没有分号的表达式就是return的逻辑  
    n  
}  
  
// 常规编译会被跳过, cargo test 自动调用  
//  是一个属性 , 类似于Java 的注解  
#[test]  
fn test_gcd() {  
    assert_eq!(gcd(14, 15), 1);  
    assert_eq!(gcd(2 * 3 * 5 * 11 * 17, 3 * 7 * 11 * 13 * 19), 3 * 11)  
}

使用命令行参数计算最大公约数

use std::process::exit;  
use std::str::FromStr;  
  
use crate::gcd::gcd;  
  
pub fn cal_gcd_from_args() {  
    let mut numbers = Vec::new();  
  
    for arg in std::env::args().skip(1) {  
        // expect 如果是 error ,就会输出对应的信息  
        numbers.push(u64::from_str(&arg).expect("error parsing argument"));  
    }  
  
    if numbers.len() == 0 {  
        // 这个操作什么失败的情况 , 直接 unwrap , 使用 expect 太重了  
        // writeln!(std::io::stderr(), "Usage: gcd NUMBER...").unwrap();  
        exit(1);  
    }  
  
    let mut d = numbers[0];  
    for m in &numbers[1..] {  
        d = gcd(d, *m);  
    }  
  
    println!("The greatest common divisor of {:?} is {}", numbers, d);  
}

web 服务器

// 引入第三方包  
extern crate iron;  
extern crate mime;  
  
  
use iron::prelude::*;  
use iron::status;  
use mime::mime;  
  
pub fn run_server() {  
    println!("Serving on http://localhost:3000...");  
    Iron::new(get_form).http("localhost:3000").unwrap();  
}  
  
  
fn get_form(_request: &mut Request) -> IronResult<Response> {  
    let mut response = Response::new();  
  
    response.set_mut(status::Ok);  
    response.set_mut(mime!(Text/Html; Charset=Utf8));  
    // rust 原始字符  
    response.set_mut(r#"  
        <title>GCD Caculator</title>         <form action="/gcd" method="post">            <input type="text" name="n"/>            <input type="text" name="n"/>            <button type="submit">Compute GCD</button>        </form>    "#);  
    Ok(response)  
}