Rust從入門到放棄(1)—— hello,world

安裝及環境配置

  • 特色:安全,性能,併發
  • rust源配置
  • RLS安裝
  • cargo
    • rust管理工具,該工具能夠愉快方便的管理rust工程
      #!/bin/bash
      mkdir learn
      cd learn
      cargo init	## 該命令會在當前目錄下初始化一個
      		## 目錄下會出現一個Cargo.toml文件,這是Cargo的配置文件
      		## 還有一個src目錄,目錄中包含一個main.rs的初始文件
      cargo run	## 命令會編譯並運行程序
      cargo build	## 編譯工程

變量與函數

函數定義 fn main(){}

fn main(){
	let world = "world";
	println!("hello, {}!", world);
}
//該例子中能夠看出來,變量定義使用關鍵字 let,字符串格式化中的佔位符采用 {}
  • let 關鍵字用於引入一個變量
  • 佔位符 {},在Rust中比較通用,將變量轉化爲字符串,這裏的變量能夠是數值或者字符串。
  • 返回值,->
fn main() {
	let x:i32;
	let y:i32;
	x = 10;
	y = 5;
	println!("x = {}, y = {}", x, y);
	println!("add(x, y) = {}", add(x,y));
}

fn add(x:i32, y:i32) ->i32{
	x+y
	// return x+y;
}

變量聲明

let val:i32 = 1
  • 在rust中類型定義採用 var: type的形式
fn foo(_x :&'static str) -> &'static str{
	"world"
}
fn main(){
	println!("hello, {}!", foo("bar"));
}
  • 靜態字符串變量 &'static strshell

  • 注意:在rust中,str是關鍵字,不能用做變量名數組

let (x,y) = (5, 'a')  
// 類型分別是i32,char
  • 默認狀況下,Rust中的一切都是不可變的,也就是說變量定義後不可改變其值,下面這段代碼編譯不會經過。
let  x:i32 =10;
x = 6;
// ^^^^^ cannot assign twice to immutable variable
  • 若是要改變變量,聲明時須要加上mut關鍵字
let mut x:i32 = 10
x = 6
  • 字符串,Rust中存在兩種字符串類型,str和String。安全

    • &str: 字符串切片,固定大小的,不可變的UTF-8字節序列。
    let x = "hello world!";
    	let y:&str = "hahahhahahah";
    • String對象是可變的,能夠用String::from初始化該類型
    let x = String::from(「Hello, World」);
    	let y: String = String::from(「Isn’t it a wonderful life?");
{
	let mut s1 :&str = "s1 is &str";
	let mut s2 :String = String::from("s2 is String");
	println!("{}, {}", s1, s2);
	// s1 is &str, s2 is String

	s1 = "s1 is changed";
	s2 = String::from("s2 is changed");
	println!("{}, {}", s1, s2);
	// s1 is changed, s2 is changed
}
  • 數字
    • i8 i16 i32 i64
    • u8 u16 u32 u64
    • isize usize
    • f32,f64
  • 數組
let x = [1, 2, 3];
let y: [i32; 3] = [4, 5, 6];
  • 數組不常使用,rust中vector更爲常見
let x = vec![1, 2, 3];
let y: Vec<i32> = [4, 5, 6];
  • 元組
    • 有序的、不可變的對象列表
      let x = (5, 'A');
      let y : (i32, char) = (12, 'c');
      let v = x.0 // v == 5
      let a = y.1 // a == 'c'

Rust中的全部權

  • 全部權bash

    • Rust中,每一個變量對綁定到它上的值有全部權。
    • Rust中堆上的每一個值都有一個全部者(變量)
    • 當全部者超出做用域時,該值將被丟棄
    // String的長度是可變的,分配在堆中,因此這裏的會發生全部權移動。
    	// 在Rust中,這個過程稱之爲移動move,即本來x的值移動到了y上,x失效了。
    	fn main(){
    		let x = String::from("hello"); // x是"hello"
    		let y = x; // y是「hello」,這時x已經失效
    		println!("x is {}, f(x) is {}",x, y); // 會出錯,由於x失效了。 
    	}
  • 借用併發

    • 任何借用的有效期都不能超過原始全部者的做用域
    • 任什麼時候刻,都可以不可變的借用一個資源許屢次
    • 任什麼時候刻,都可以可變的借用一個資源一次

方法&關聯函數

  • impl做爲實現結構體方法的關鍵字,方法的輸入參數中第一個是self。調用採用.
  • impl範圍內,輸入參數沒有self的方法,即爲關聯函數。調用使用:
  • 關聯函數常常被用做返回一個結構體新實例的構造函數。下面的例子中,Square即爲Rect的關聯函數。
  • 每一個Struct容許多個impl
// 定義一個結構體
struct Rect{
	width: i32,
	length: i32,
}

// 方法
impl Rect{
	fn Area(&self) -> i32{
		self.width * self.length
	}

}

// 關聯函數
impl Rect{	
	fn Square(w:i32) -> Rect{
		Rect{width :w,
			length: w,
			}
	}
}
相關文章
相關標籤/搜索