日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Rust从入门到放弃(1)—— hello,world

發(fā)布時間:2023/12/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Rust从入门到放弃(1)—— hello,world 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

安裝及環(huán)境配置

  • 特點:安全,性能,并發(fā)
  • rust源配置
  • RLS安裝
  • cargo
    • rust管理工具,該工具可以愉快方便的管理rust工程

      #!/bin/bash mkdir learn cd learn cargo init ## 該命令會在當前目錄下初始化一個## 目錄下會出現(xiàn)一個Cargo.toml文件,這是Cargo的配置文件## 還有一個src目錄,目錄中包含一個main.rs的初始文件 cargo run ## 命令會編譯并運行程序 cargo build ## 編譯工程

變量與函數(shù)

函數(shù)定義 fn main(){}

fn main(){let world = "world";println!("hello, {}!", world); } //該例子中可以看出來,變量定義使用關(guān)鍵字 let,字符串格式化中的占位符采用 {}
  • let 關(guān)鍵字用于引入一個變量
  • 占位符 {},在Rust中比較通用,將變量轉(zhuǎn)化為字符串,這里的變量可以是數(shù)值或者字符串。
  • 返回值,->
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")); }
  • 靜態(tài)字符串變量 &'static str

  • 注意:在rust中,str是關(guān)鍵字,不能用作變量名

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

    • &str: 字符串切片,固定大小的,不可變的UTF-8字節(jié)序列。
    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 Strings1 = "s1 is changed";s2 = String::from("s2 is changed");println!("{}, {}", s1, s2);// s1 is changed, s2 is changed }
  • 數(shù)字
    • i8 i16 i32 i64
    • u8 u16 u32 u64
    • isize usize
    • f32,f64
  • 數(shù)組
let x = [1, 2, 3]; let y: [i32; 3] = [4, 5, 6];
  • 數(shù)組不常使用,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中的所有權(quán)

  • 所有權(quán)
    • Rust中,每個變量對綁定到它上的值有所有權(quán)。
    • Rust中堆上的每個值都有一個所有者(變量)
    • 當所有者超出作用域時,該值將被丟棄
    // String的長度是可變的,分配在堆中,所以這里的會發(fā)生所有權(quán)移動。 // 在Rust中,這個過程稱之為移動move,即原本x的值移動到了y上,x失效了。 fn main(){let x = String::from("hello"); // x是"hello"let y = x; // y是“hello”,這時x已經(jīng)失效println!("x is {}, f(x) is {}",x, y); // 會出錯,因為x失效了。 }
  • 借用
    • 任何借用的有效期都不能超過原始所有者的作用域
    • 任何時刻,都能夠不可變的借用一個資源許多次
    • 任何時刻,都能夠可變的借用一個資源一次

方法&關(guān)聯(lián)函數(shù)

  • impl作為實現(xiàn)結(jié)構(gòu)體方法的關(guān)鍵字,方法的輸入?yún)?shù)中第一個是self。調(diào)用采用.
  • impl范圍內(nèi),輸入?yún)?shù)沒有self的方法,即為關(guān)聯(lián)函數(shù)。調(diào)用使用:
  • 關(guān)聯(lián)函數(shù)經(jīng)常被用作返回一個結(jié)構(gòu)體新實例的構(gòu)造函數(shù)。下面的例子中,Square即為Rect的關(guān)聯(lián)函數(shù)。
  • 每個Struct允許多個impl塊
// 定義一個結(jié)構(gòu)體 struct Rect{width: i32,length: i32, }// 方法 impl Rect{fn Area(&self) -> i32{self.width * self.length}}// 關(guān)聯(lián)函數(shù) impl Rect{ fn Square(w:i32) -> Rect{Rect{width :w,length: w,}} }

轉(zhuǎn)載于:https://www.cnblogs.com/gexin/p/10941227.html

總結(jié)

以上是生活随笔為你收集整理的Rust从入门到放弃(1)—— hello,world的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。