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)
}