【Rust】函數

目錄

思維導圖

1. 函數的基本概念

1.1 函數的定義

2. 參數的使用

2.1 單個參數的示例

2.2 多個參數的示例

3. 語句與表達式

3.1 語句與表達式的區別

3.2 示例

4. 帶返回值的函數

4.1 返回值的示例

4.2 返回值與表達式

5. 錯誤處理

5.1 錯誤示例


思維導圖

1. 函數的基本概念

????????Rust語言中,函數是代碼中常見的構造,主要用于組織和復用代碼。main函數是大多數程序的入口點,并引入了fn關鍵字用于定義新函數。

1.1 函數的定義

  • 定義方式:通過fn關鍵字后接函數名和一對括號來定義函數。
  • 代碼示例
    fn main() {println!("Hello, world!");another_function();
    }
    fn your_function() {println!("Your function.");
    }
    
  • 調用函數:可以在main函數內調用其他已定義的函數,如your_function

2. 參數的使用

????????Rust允許函數定義參數,參數是函數簽名的特殊變量,允許向函數傳遞具體的值。

2.1 單個參數的示例

  • 代碼示例
    fn main() {your_function(5);
    }
    fn your_function(x: i32) {println!("The value of x is: {x}");
    }
    
  • 輸出:運行后將打印The value of x is: 5

2.2 多個參數的示例

  • 代碼示例
    fn main() {print_multiparameter(5, 'h');
    }
    fn print_multiparameter(value: i32, unit_label: char) {println!("The result is: {value}{unit_label}");
    }
    
  • 輸出:運行后將打印The result is: 5h

3. 語句與表達式

????????Rust語言中,函數體由一系列語句組成,這些語句可以選擇性地以表達式結束。

3.1 語句與表達式的區別

  • 語句:執行某個操作但不返回值,例如變量聲明。
  • 表達式:計算并返回值,例如數學運算5 + 6

3.2 示例

  • 代碼示例
    fn main() {let y = {let x = 3;x + 1};println!("The value of y is: {y}");
    }
    
  • 輸出:將打印The value of y is: 4

4. 帶返回值的函數

????????函數可以返回值,返回值的類型需要在箭頭->后聲明。

4.1 返回值的示例

  • 代碼示例
    fn num() -> i32 {6
    }
    fn main() {let x = num();println!("The value of x is: {x}");
    }
    
  • 輸出:運行后將打印The value of x is: 6

4.2 返回值與表達式

  • 重要性:函數的返回值是函數體內最后一個表達式的值。
  • 示例
    fn add_one(x: i32) -> i32 {x + 1
    }
    
  • 注意:如果在返回值的表達式后加上分號,將導致錯誤,因為分號會將表達式變為語句,不再返回值。

5. 錯誤處理

????????若在函數中不正確地使用分號,會導致類型不匹配的錯誤,編譯器會給出相應的錯誤信息以幫助調試。

5.1 錯誤示例

  • 代碼示例
    fn add_one(x: i32) -> i32 {x + 1; // 錯誤:這里不返回值
    }
    
  • 錯誤信息:編譯器會提示?mismatched types即類型不匹配,因為函數聲明期望返回?i32類型,但實際返回的是(),即unit類型。

tips:

  • 蛇形命名法;
  • 必須聲明參數類型
  • 有返回值時,必須是表達式。

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

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

相關文章

Cython全教程2 多種定義方式

—— 本篇文章,主要講述Cython中的四種定義關鍵字 全教程2 多種定義方式: 在Cython中,關于定義的關鍵字有四個,分別是: cdef、def、cpdef、DEF 一、cdef定義關鍵字 顧名思義,cdef關鍵字定義的是一個C函數…

Web開發(一)HTML5

Web開發(一)HTML5 寫在前面 參考黑馬程序員前端Web教程做的筆記,主要是想后面自己搭建網頁玩。 這部分是前端HTML5CSS3移動web視頻教程的HTML5部分。主要涉及到HTML的基礎語法。 HTML基礎 標簽定義 HTML定義 HTML(HyperText Markup Lan…

MATLAB學習筆記目錄

MATLAB學習筆記-生成純音并保存-CSDN博客 MATLAB學習筆記-各種格式之間的轉換 - 知乎 MATLAB學習筆記-胞組(cell array)轉換為矩陣,cell2mat_matlab如何把元胞數組改為矩陣-CSDN博客MATLAB學習筆記-判斷數組、結構體、數值、字符串是否相同…

Java-數據結構-棧與隊列(常考面試題與單調棧)

在上一篇的學習中,我們學習了棧和隊列的基本知識,以及它們對應都有哪些方法,在什么應用場景下如何使用,并且還對它們進行了模擬實現,而其實對于棧和隊列的相關知識還遠不止于此,而今天我們就對棧與隊列進行…

JSON.stringify(res,null,2)的含義

JSON.stringify(res, null, 2) 是 JavaScript 中將對象轉換為 JSON 字符串的方法,具體說明如下: 參數解釋 res:要轉換的對象。它可以是 JavaScript 中的任意類型,如對象、數組、字符串、數字等。例如,{name: "K…

Spring 項目 基于 Tomcat容器進行部署

文章目錄 一、前置知識二、本地Idea運行Spring項目1. 將寫好的 Spring 項目先打包成 war 包2. 查看項目工件(Artifact)是否存在3. 配置 Tomcat3.1 添加一個本地 Tomcat 容器3.2 將項目部署到 Tomcat 4. 運行項目 三、基于 Tomcat 部署及多實例部署1. Spr…

usbredir學習

文章目錄 背景典型場景編譯usbredirparserusbredirfilterusbredirparser/usbredirproto usbredirhostusbredirect/usbredirtestclient參考 背景 usbredir 是一種用于通過網絡轉發 USB 設備流量的網絡協議。它也是一個軟件包的名稱,該軟件包提供了一個解析庫、一個 …

ESXI 安裝教程(3) ---?vCenter Server 安裝

不涉及復雜的操作此項可不安裝 1.鏡像加載到虛擬光盤 對應的網盤文件 2.打開文件路徑 雙擊運行文件installer.exe 3.調整安裝語言 4.點擊安裝 5. 6. 證書,有效問題導致此提示,非專業網絡管理人員,不知道如何處理,此處點是即可 證書有效開始時間是安裝時間8小時 證書有效結束…

【初識掃盲】逆概率加權

我們正在處理一個存在缺失數據的回歸模型,并且希望采用一種非參數的逆概率加權方法來調整估計,以應對這種缺失數據的情況。 首先,我們需要明確問題的背景。我們有樣本 { ( Y i , X i , r i ) : i 1 , … , n } \left\{\left(Y_i, \boldsym…

極客說|Azure AI Agent Service 結合 AutoGen/Semantic Kernel 構建多智能體解決?案

作者:盧建暉 - 微軟高級云技術布道師 「極客說」 是一檔專注 AI 時代開發者分享的專欄,我們邀請來自微軟以及技術社區專家,帶來最前沿的技術干貨與實踐經驗。在這里,您將看到深度教程、最佳實踐和創新解決方案。關注「極客說」&am…

【集成學習】Boosting算法詳解

文章目錄 1. 集成學習概述2. Boosting算法詳解3. Gradient Boosting算法詳解3.1 基本思想3.2 公式推導 4. Python實現 1. 集成學習概述 集成學習(Ensemble Learning)是一種通過結合多個模型的預測結果來提高整體預測性能的技術。相比于單個模型&#xf…

小米vela系統(基于開源nuttx內核)——如何使用信號量進行PV操作

如何使用信號量進行PV操作 前言信號量1. 信號量簡介2. NuttX中信號量的創建與使用2.1 Nuttx信號量的初始化和銷毀2.2 信號量的等待和發布 3. 信號量的實際應用:下載任務示例3.1 實際代碼3.2 代碼說明3.3 執行說明 4. 信號量的優勢與應用場景5. 常見應用場景&#xf…

CMake學習筆記(2)

1. 嵌套的CMake 如果項目很大,或者項目中有很多的源碼目錄,在通過CMake管理項目的時候如果只使用一個CMakeLists.txt,那么這個文件相對會比較復雜,有一種化繁為簡的方式就是給每個源碼目錄都添加一個CMakeLists.txt文件&#xff…

旅游網站設計與實現

文末附有完整項目代碼 在當今數字化時代,旅游網站成為人們獲取旅游信息的重要途徑。本文將詳細介紹旅游網站的設計與實現,讓你輕松了解其中的技術奧秘! 一、項目背景 隨著社會經濟的發展,人們對精神消費愈發重視,旅游…

【C++】size_t究竟是什么?全面解析與深入拓展

博客主頁: [小????????] 本文專欄: C 文章目錄 💯前言💯一、什么是size_t?為什么需要size_t? 💯二、size_t的特性與用途1. size_t是無符號類型示例: 2. size_t的跨平臺適應性示例對…

【物流管理系統 - IDEAJavaSwingMySQL】基于Java實現的物流管理系統導入IDEA教程

有問題請留言或私信 步驟 下載項目源碼:項目源碼 解壓項目源碼到本地 打開IDEA 左上角:文件 → 新建 → 來自現有源代碼的項目 找到解壓在本地的項目源代碼文件,點擊確定,根據圖示步驟繼續導入項目 查看項目目錄&#xff…

ssh2-sftp-client和ssh2配合使用js腳本快速部署項目到服務器

有時候因為服務器不能實現github或者gitlab的自動部署服務,所以就需要使用腳本來實現自動部署,可以省時省力,一勞永逸。這里就使用ssh2-sftp-client和ssh2來實現,即便是需要sudo權限,也是可以的。 1.先將本地打包后的…

深度解析Linux中的調試器gdb/cgdb的使用

Linux下我們編譯好的代碼,無法直接調試 gcc/g默認的工作模式是realse模式 程序要調試的話,必須是debug模式,也就是說編譯的時候要加-g選項 gdb攜帶調試信息的exe 我們現在在文件夾里面創建一個文件lesson11 里面創建一個累加的代碼&…

【Maui】動態菜單實現(綁定數據視圖)

前言 .NET 多平臺應用 UI (.NET MAUI) 是一個跨平臺框架,用于使用 C# 和 XAML 創建本機移動和桌面應用。 使用 .NET MAUI,可從單個共享代碼庫開發可在 Android、iOS、macOS 和 Windows 上運行的應用。 .NET MAUI 是一款開放源代碼應用,是 X…

Bash語言的語法糖

Bash語言的語法糖 引言 在現代編程語言中,“語法糖”是一個非常常見的術語,它指的是那些使代碼更加易讀、易寫的語法特性。盡管這些特性并不改變語言的功能,但它們能顯著提升開發者的編程體驗。在眾多編程語言中,Bash&#xff0…