最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rust 函數(shù)詳解

 更新時(shí)間:2021年11月11日 10:46:18   作者:花落花開99  
函數(shù)在 Rust 語言中是普遍存在的。Rust 支持多種編程范式,但更偏向于函數(shù)式,函數(shù)在 Rust 中是“一等公民”,函數(shù)可以作為數(shù)據(jù)在程序中進(jìn)行傳遞,對(duì)Rust 函數(shù)相關(guān)知識(shí)感興趣的朋友一起看看吧

Rust 支持多種編程范式,但更偏向于函數(shù)式,函數(shù)在 Rust 中是“一等公民”,函數(shù)可以作為數(shù)據(jù)在程序中進(jìn)行傳遞。跟 C、C++ 一樣, Rust 也有一個(gè)唯一的程序入口 main 函數(shù)。

示例:程序入口 main 函數(shù)

fn main() {
    println!("Hello, world!");
}

Rust 使用 fn 關(guān)鍵字來聲明和定義函數(shù),使用 snake case 風(fēng)格來命名函數(shù),即所有的字母小寫并使用下劃線分隔單詞。函數(shù)可以有參數(shù),并且每個(gè)函數(shù)都有返回值。

函數(shù)參數(shù)

參數(shù)的聲明方式:參數(shù)名 + 冒號(hào) + 參數(shù)類型

示例

// 定義一個(gè)無參函數(shù)
fn function() {
    println!("A function with no parameters.");
}

// 定義一個(gè)有參函數(shù)
fn hello(name: &str) {
  println!("Hello, {}.", name);
}

函數(shù)返回值

在 Rust 中所有函數(shù)都有返回值,main 函數(shù)也不例外,main 函數(shù)的返回值是 ()(一個(gè)空的元組)。在 Rust 中,當(dāng)一個(gè)函數(shù)返回 () 時(shí),可以省略返回值類型的聲明。main 函數(shù)的完整形式如下:

  fn main() -> () {
    //statements
  }

() 通常被稱為 unit 或者 unit type,它其實(shí)類似于 C/C++、Java、C#中的 void 類型。

若函數(shù)有其他類型返回值,則需使用 -> 顯式標(biāo)明返回值類型。像 C/C++ 或 Java 等語言在函數(shù)中需要用 return 語句返回一個(gè)值,Rust 與它們不一樣,Rust 默認(rèn)將函數(shù)中最后一個(gè)表達(dá)式的結(jié)果作為返回值。

示例:定義一個(gè)有返回值的函數(shù)

fn main() {
    let x = plus_one(5);

    println!("The value of x is: {}", x);
}

fn plus_one(x: i32) -> i32 {
    x + 1
}

Rust 也有 return 關(guān)鍵字,不過一般用于提前返回。

示例:在函數(shù)中使用 return

fn main() {
  let a = [1,3,2,5,9,8];
  println!("There is 7 in the array: {}", find(7, &a));
  println!("There is 8 in the array: {}", find(8, &a));
}
fn find(n: i32, a: &[i32]) -> bool {
  for i in a {
    if *i == n {
      return true;
    }
  }
  false // 這里也可以改為 `return false;`,但這就不是 Rust 的編程風(fēng)格了
}

在 Rust 中還有一種“沒有返回值”的函數(shù),稱之為發(fā)散函數(shù)(diverging function)。其實(shí),它根本就不返回,它使用感嘆號(hào) ! 作為返回類型。

示例

fn main() {
  println!("hello");
  diverging();
  println!("world");
}
fn diverging() -> ! {
  panic!("This function will never return");
}

發(fā)散函數(shù)一般都以 panic! 宏調(diào)用或其他調(diào)用其他發(fā)散函數(shù)結(jié)束,所以,調(diào)用發(fā)散函數(shù)會(huì)導(dǎo)致當(dāng)前線程崩潰。

高階函數(shù)

高階函數(shù)與普通函數(shù)的不同在于,它可以使用一個(gè)或多個(gè)函數(shù)作為參數(shù),可以將函數(shù)作為返回值。既然函數(shù)可以作為參數(shù)和返回值,那么函數(shù)也應(yīng)該有一種相對(duì)應(yīng)的數(shù)據(jù)類型,那就是:函數(shù)指針類型。

函數(shù)指針類型

函數(shù)指針類型使用 fn 關(guān)鍵字定義,在編譯時(shí)該類型指向一個(gè)已知函數(shù)參數(shù)和返回值類型,但函數(shù)體未知的函數(shù)。

示例

// 函數(shù)定義
fn inc(n: i32) -> i32 {
    n + 1
}

// 使用 `type` 給函數(shù)指針類型起一個(gè)別名
type IncType = fn(i32) -> i32;

fn main() {
    // 使用函數(shù)指針類型 `fn(i32) -> i32`
    let func: fn(i32) -> i32 = inc;
    println!("3 + 1 = {}", func(3));

    // 使用函數(shù)指針類型的別名 `IncType`
    let func: IncType = inc;
    println!("4 + 1 = {}", func(4));
}

函數(shù)作為參數(shù)

函數(shù)作為參數(shù),其聲明與普通參數(shù)一樣。

示例:高階函數(shù)

fn main() {
  println!("3 + 1 = {}", process(3, inc));
  println!("3 - 1 = {}", process(3, dec));
}
fn inc(n: i32) -> i32 {
  n + 1
}
fn dec(n: i32) -> i32 {
  n - 1
}
// process 是一個(gè)高階函數(shù),它有兩個(gè)參數(shù),一個(gè)類型為 `i32`,另一個(gè)類型為 `fn(i32)->i32`
fn process(n: i32, func: fn(i32) -> i32) -> i32 {
  func(n)
}

函數(shù)作為返回值

函數(shù)作為返回值,其聲明與普通函數(shù)的返回值類型聲明一樣。

示例

fn main() {
    let a = [1,2,3,4,5,6,7];
    let mut b = Vec::<i32>::new();
    for i in &a {
        b.push(get_func(*i)(*i));
    }
    println!("{:?}", b);
 }

 // 若傳入的參數(shù)為偶數(shù),返回 `inc`,否則返回 `dec`
 fn get_func(n: i32) -> fn(i32) -> i32 {
    fn inc(n: i32) -> i32 {
        n + 1
    }
    fn dec(n: i32) -> i32 {
        n - 1
    }
    if n % 2 == 0 {
        inc
    } else {
        dec
    }
}

相關(guān)資料

Rust Programming Language

The Rust Reference

Rust By Example

RustPrimer

到此這篇關(guān)于Rust 函數(shù)的文章就介紹到這了,更多相關(guān)Rust 函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust使用kind進(jìn)行異常處理(錯(cuò)誤的分類與傳遞)

    Rust使用kind進(jìn)行異常處理(錯(cuò)誤的分類與傳遞)

    Rust?有一套獨(dú)特的處理異常情況的機(jī)制,它并不像其它語言中的?try?機(jī)制那樣簡(jiǎn)單,這篇文章主要介紹了Rust指南錯(cuò)誤的分類與傳遞以及使用kind進(jìn)行異常處理,需要的朋友可以參考下
    2022-09-09
  • Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解

    Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解

    系統(tǒng)的開發(fā),測(cè)試和部署離不開環(huán)境變量,今天分享在Rust的系統(tǒng)開發(fā)中,使用dotenvy來讀取和使用環(huán)境變量,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 詳解Rust中泛型的使用

    詳解Rust中泛型的使用

    泛型是一種在編寫代碼時(shí)不指定具體類型,而在使用時(shí)再確定類型的編程技巧,本文將詳細(xì)介紹?Rust?中泛型的相關(guān)概念和用法,希望對(duì)大家有所幫助
    2023-06-06
  • 如何使用rust實(shí)現(xiàn)簡(jiǎn)單的單鏈表

    如何使用rust實(shí)現(xiàn)簡(jiǎn)單的單鏈表

    實(shí)現(xiàn)單鏈表在別的語言里面可能是一件簡(jiǎn)單的事情,單對(duì)于Rust來說,絕對(duì)不簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于如何使用rust實(shí)現(xiàn)簡(jiǎn)單的單鏈表的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • 一文弄懂Rust之切片

    一文弄懂Rust之切片

    在Rust中,切片是一種非常重要的引用類型,它允許你安全地引用一段連續(xù)內(nèi)存中的數(shù)據(jù),而不需要擁有這些數(shù)據(jù)的所有權(quán),本文主要介紹了Rust之切片,感興趣的可以了解一下
    2024-03-03
  • Rust?use關(guān)鍵字妙用及模塊內(nèi)容拆分方法

    Rust?use關(guān)鍵字妙用及模塊內(nèi)容拆分方法

    這篇文章主要介紹了Rust?use關(guān)鍵字妙用|模塊內(nèi)容拆分,文中還給大家介紹use關(guān)鍵字的習(xí)慣用法,快速引用自定義模塊內(nèi)容或標(biāo)準(zhǔn)庫,以此優(yōu)化代碼書寫,需要的朋友可以參考下
    2022-09-09
  • 深入探究在Rust中函數(shù)、方法和關(guān)聯(lián)函數(shù)有什么區(qū)別

    深入探究在Rust中函數(shù)、方法和關(guān)聯(lián)函數(shù)有什么區(qū)別

    在 Rust 中,函數(shù)、方法和關(guān)聯(lián)函數(shù)都是用來封裝行為的,它們之間的區(qū)別主要在于它們的定義和調(diào)用方式,本文將通過一個(gè)簡(jiǎn)單的rust代碼示例來給大家講講Rust中函數(shù)、方法和關(guān)聯(lián)函數(shù)區(qū)別,需要的朋友可以參考下
    2023-08-08
  • Rust可迭代類型迭代器正確創(chuàng)建自定義可迭代類型的方法

    Rust可迭代類型迭代器正確創(chuàng)建自定義可迭代類型的方法

    在 Rust 中, 如果一個(gè)類型實(shí)現(xiàn)了 Iterator, 那么它會(huì)被同時(shí)實(shí)現(xiàn) IntoIterator, 具體邏輯是返回自身, 因?yàn)樽陨砭褪堑?這篇文章主要介紹了Rust可迭代類型迭代器正確創(chuàng)建自定義可迭代類型的方法,需要的朋友可以參考下
    2023-12-12
  • rust標(biāo)準(zhǔn)庫std::env環(huán)境相關(guān)的常量

    rust標(biāo)準(zhǔn)庫std::env環(huán)境相關(guān)的常量

    在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見的兩種方式和處理環(huán)境變量的兩種常見方式, 拋開Rust的語法, 實(shí)際上在命令行參數(shù)的處理方式上, 與其它語言大同小異, 可能影響我們習(xí)慣的也就只剩下語法,本文介紹rust標(biāo)準(zhǔn)庫std::env的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2024-03-03
  • Rust使用lettre實(shí)現(xiàn)郵件發(fā)送功能

    Rust使用lettre實(shí)現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Rust如何使用lettre實(shí)現(xiàn)郵件發(fā)送功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11

最新評(píng)論

溧阳市| 特克斯县| 资中县| 武陟县| 洪雅县| 富蕴县| 吴桥县| 泸定县| 丹棱县| 天峻县| 谢通门县| 奉化市| 辽阳县| 布尔津县| 金阳县| 揭东县| 都匀市| 丹棱县| 大港区| 炎陵县| 河曲县| 徐水县| 准格尔旗| 阳泉市| 岳西县| 澳门| 迁西县| 南岸区| 台南市| 泰兴市| 托克逊县| 阿克陶县| 内丘县| 湟中县| 府谷县| 寿阳县| 盱眙县| 甘洛县| 沿河| 吐鲁番市| 云和县|