记录在学习的过程中rust
语言和java
、js
相似的地方,以及rust
的特性
- 引用外部包:
extern crate rand;
// crate 代表依赖,rand 是依赖名称 - 引用内部默认包:
use std::io;
// 使用标准包下的io,也可以在使用时全路径指定,如std::io::stdin();
- 引入了宏,如常用的
print!("hello, {}", "zhangsan")
; // 感叹号代表使用的是宏,不是函数 - 一般用
let
定义变量,且变量默认是不可以改变的,用mut
修饰就可以改变,且传参时支持&
地址引用;const
定义常量,任何时候都不可改变 u32
表示无符号的32位整形(有符号表示为正数,如i32)
答疑:
6. 为什么使用::
而是不是.
?
这两个冒号(::)是运算符,允许将特定的某个函数置于某类型的命名空间(namespace)下。
- &引用
& 是引用,为什么需要引用,因为涉及到垃圾回收,如下
{
let s1 = String: from("hello");
let s2 = s1; // 这里 s1 失效了,因为在任意给定时间,要么 只能有一个可变引用(不允许存在竞争),要么 只能有多个不可变引用
doSomeThing(s1); // 同样也是失效,因为参数也是赋值,如果想不失效,应使用&引用
}
猜数字游戏 Demo |
extern crate rand;
use std::io;
use std::cmp::Ordering;
use rand::Rng;
fn main() {
println!("Guess the number!");
println!("Please input your guess.");
let secret_number = rand::thread_rng().gen_range(1, 101);
// println!("the sceret number is {}", secret_number);
loop {
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("Failed to read line");
println!("You guessed: {}", guess);
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {println!("Please type a number!");continue},
};
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small"),
Ordering::Greater => println!("Too big"),
Ordering::Equal => {println!("You win");break;},
}
}
}