欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Rust 函數(shù)詳解

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

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

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

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

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

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

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

示例

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

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

函數(shù)返回值

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

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

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

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

示例:定義一個有返回值的函數(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 的編程風格了
}

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

示例

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ù)會導致當前線程崩潰。

高階函數(shù)

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

函數(shù)指針類型

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

示例

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

// 使用 `type` 給函數(shù)指針類型起一個別名
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 是一個高階函數(shù),它有兩個參數(shù),一個類型為 `i32`,另一個類型為 `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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust中的函數(shù)指針詳解

    Rust中的函數(shù)指針詳解

    Rust是一種現(xiàn)代的系統(tǒng)編程語言,它支持函數(shù)指針。函數(shù)指針是指向函數(shù)的指針,可以將函數(shù)作為參數(shù)傳遞給其他函數(shù)或存儲在變量中。Rust中的函數(shù)指針可以用于實現(xiàn)回調(diào)函數(shù)、動態(tài)分發(fā)和多態(tài)等功能。本文將介紹Rust中的函數(shù)指針的基本用法和高級用法。
    2023-05-05
  • Rust中的Iterator和IntoIterator介紹及應(yīng)用小結(jié)

    Rust中的Iterator和IntoIterator介紹及應(yīng)用小結(jié)

    Iterator即迭代器,它可以用于對數(shù)據(jù)結(jié)構(gòu)進行迭代,被迭代的數(shù)據(jù)結(jié)構(gòu)是可迭代的(iterable),所謂的可迭代就是這個數(shù)據(jù)結(jié)構(gòu)有返回迭代器的方法,這篇文章主要介紹了Rust中的Iterator和IntoIterator介紹及應(yīng)用,需要的朋友可以參考下
    2023-07-07
  • 使用systemd部署r-nacos的操作方法

    使用systemd部署r-nacos的操作方法

    r-nacos是一個用rust實現(xiàn)的nacos服務(wù),我們用它平替java?nacos以降低服務(wù)占用內(nèi)存,提升服務(wù)的穩(wěn)定性,這篇文章主要介紹了使用systemd部署r-nacos,需要的朋友可以參考下
    2024-03-03
  • Rust中的Struct使用示例詳解

    Rust中的Struct使用示例詳解

    這篇文章主要介紹了Rust中的Struct使用示例,代碼分為結(jié)構(gòu)體和實例化與訪問,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 如何使用VSCode配置Rust開發(fā)環(huán)境(Rust新手教程)

    如何使用VSCode配置Rust開發(fā)環(huán)境(Rust新手教程)

    這篇文章主要介紹了如何使用VSCode配置Rust開發(fā)環(huán)境(Rust新手教程),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 最新評論