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 str

  • 注意:在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 Strings1 = "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中的所有權

  • 所有權
    • 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,}}
}

轉載于:https://www.cnblogs.com/gexin/p/10941227.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

牛客33-tokitsukaze and Number Game(數論)

題目描述 tokitsukaze又在玩3ds上的小游戲了&#xff0c;現在她遇到了難關。 tokitsukaze得到了一個整數x&#xff0c;并被要求使用x的每一位上的數字重新排列&#xff0c;組成一個能被8整除的數&#xff0c;并且這個數盡可能大。 聰明的你們請幫幫可愛的tokitsukaze&#xff0…

手摸手,帶你用vue擼后臺 系列一(基礎篇) - 掘金

完整項目地址&#xff1a;vue-element-admin 系列文章&#xff1a; 手摸手&#xff0c;帶你用 vue 擼后臺 系列一&#xff08;基礎篇&#xff09;手摸手&#xff0c;帶你用 vue 擼后臺 系列二(登錄權限篇)手摸手&#xff0c;帶你用 vue 擼后臺 系列三 (實戰篇)手摸手&#xf…

21、python基礎學習-new_three_menu

1 #!/usr/bin/env python2 #__author: hlc3 #date: 2019/5/294 5 menu {6 北京: {7 海淀: {8 五道口: {9 soho: {}, 10 網易: {}, 11 google: {} 12 }, 13 中關村: { 14 …

文獻筆記(十六)

一、基本信息 標題&#xff1a;一種基于 C 語言訪問 MySQL 數據庫的研究 時間&#xff1a;2016 出版源&#xff1a;貴州輕工職業技術學院 領域分類&#xff1a;數據庫與信息管理 作者&#xff1a;唐林 副教授&#xff0c; 研究方向&#xff1a; 計算機應用 二、研究背景 相關工…

webpack+vue+mui學習心得

引入mui 1.不需要npm安裝; 直接從官方下載丟進來 2.那就是全局引用了; 沒錯,就是index.html里直接引入,當然也可以main.js引入,隨意啦! so easy 3.找到webpack.base.conf.js,在module與plugins之間插入以下代碼: 4.這樣就可以在項目里面直接用了.然就是mui與vue-router及點…

[java設計模式簡記] 觀察者模式(Observer-Pattern)

觀察者模式(Observer-Pattern) 數據主體擁有需要數據的對象的數據&#xff0c;并且數據改變時需要數據的對象要及時知道 意圖&#xff1a; 定義對象間的一種一對多的依賴關系&#xff0c;當一個對象的狀態發生改變時&#xff0c;所有依賴于它的對象都得到通知并被自動更新。主要…

【ARTS】01_04_左耳聽風-20181203~1209

ARTS&#xff1a; Algrothm: leetcode算法題目Review: 閱讀并且點評一篇英文技術文章Tip/Techni: 學習一個技術技巧Share: 分享一篇有觀點和思考的技術文章Algorithm Single Number https://leetcode.com/problems/single-number/ 1&#xff09;problem Given a non-empty arra…

vue項目(webpack+mintui),使用hbuilder打包app - 小小人兒大大夢想 - 博客園

一、配置config/index.js 本人沒有配置index.js文件&#xff0c;就開始進行了打包&#xff0c;結果最終效果是頁面空白&#xff0c;解決了空白&#xff0c;接著底部圖標&#xff08;我是用的阿里巴巴圖片&#xff09;資源找不到。所以配置這步比較重要。 &#xff08;1&#…

caffe介紹

轉載于:https://www.cnblogs.com/Artimis-fightting/p/10945099.html

python-mysql 基礎知識記錄

cursor.fetchone() 與 cursor.fetchall() 如果查詢結果為空&#xff0c;前者返回 None&#xff0c;后者返回[] 此時如用 len() 函數計算長度&#xff0c;前者報錯&#xff0c;后者返回0 轉載于:https://www.cnblogs.com/ZuoAn-xieyang/p/10097230.html

微服務之consul(一) - 詩碼者 - 博客園

一、概述 consul是google開源的一個使用go語言開發的服務發現、配置管理中心服務。內置了服務注冊與發現框 架、分布一致性協議實現、健康檢查、Key/Value存儲、多數據中心方案&#xff0c;不再需要依賴其他工具&#xff08;比如ZooKeeper等&#xff09;。服務部署簡單&#x…

C#動態加載dll,dll目錄指定

<?xml version"1.0"?><configuration><startup> <supportedRuntime version"v4.0" sku".NETFramework,Versionv4.0"/></startup> <runtime> <assemblyBinding xmlns"urn:schemas-microsoft-com:a…

RestFramework之認證組件

一、認證組件的介紹 對于認證&#xff0c;我們一般有三種方式&#xff0c;即cookie, session,token, cookie,是將信息存放在客戶端(瀏覽器上)&#xff0c;信息不安全&#xff1b;session,把信息放在服務器數據庫中&#xff0c;但是要是信息量較大&#xff0c;對服務器的壓力就會…

圖解基于 Node.js 實現前后端分離 - CSDN博客

因為會上出了個意外&#xff0c;ppt圖片全部丟失&#xff0c;只好對著白板跟大家交流了半個多小時。由于我做演講不喜歡寫太多的文字&#xff0c;沒有圖片的情況下講漏了一些內容。這篇文章是我在會上分享內容對照ppt進行地整理。 基本介紹 首先從一個重要的概念“模板”說起…

java基礎之XML

目錄 java基礎之XML1. XML解析概述2. DOM4J介紹2.1 常用包2.2 內置元素2.2 Element類2.3 Attribute類2.4 常用操作3. 代碼演示3.1 DOM4J讀取xml文件3.2 DOM4J創建xml文件3.2 DOM4J修改xml文件java基礎之XML XML是一種通用的數據交換格式,它的平臺無關性、語言無關性、系統無關性…

CF176E Archaeology(set用法提示)

題目大意&#xff1a; 給一棵樹&#xff0c;每次激活或熄滅一個點&#xff0c;每次問這些點都聯通起來所需的最小總邊權 分析&#xff1a; 若根據dfs序給所有點排序&#xff0c;為$v1,v2,v3....vk$&#xff0c;那么答案就是$(dis(v1,v2)dis(v2,v3)...dis(vk-1,vk)dis(vk,v1))/2…

網上整理的對于Rest和Restful api的理解 - 那啥快看 - 博客園

一、什么是Rest? REST不是"rest"這個單詞&#xff0c;而是幾個單詞縮寫 -- REpresentational State Transfer 直接翻譯&#xff1a;表現層狀態轉移&#xff0c;但這個翻譯正常人根本看不懂&#xff0c;找到的一種最好理解的說法是&#xff0c;URL定位資源&#xff…

P1101 單詞方陣(DFS)

題目描述 給一n \times nnn的字母方陣&#xff0c;內可能蘊含多個“yizhong”單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著 88個方向的任一方向&#xff0c;同一單詞擺放時不再改變方向&#xff0c;單詞與單詞之間可以交叉,因此有可能共用字母。輸出時&#xff0c;…

企業級rancher搭建Kubernetes(采用rancher管理平臺搭建k8s)

一、簡介 Rancher簡介 來源官方&#xff1a;https://www.cnrancher.com/ Rancher是一個開源的企業級容器管理平臺。通過Rancher&#xff0c;企業再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了在生產環境中使用的管理Docker和Kubernetes的全棧化容器部…

[工具]java_sublime的快速使用

目錄 使用 : 怎么運行: 調整字體: 使用 : 新建--->寫好代碼后-->另存為尾綴是.java的文件 怎么運行: 在你另存為的目錄下cmd調用控制臺輸入dos指令--->執行javac 文件名.java(有.java尾綴)(編譯為.class文件)--->java 文件名(沒有.class尾綴設計者認為執行的是…