Rust 程式設計視訊教程(進階)——028_1 函式指標

linghuyichong發表於2020-02-24

頭條地址:https://www.ixigua.com/i677586170644791348...
B站地址:https://www.bilibili.com/video/av81202308/

github地址:https://github.com/anonymousGiga/learn_rus...

1、函式指標
函式指標允許我們使用函式作為另一個函式的引數。函式的型別是 fn ,fn 被稱為 函式指標。指定引數為函式指標的語法類似於閉包。

例子:

fn add_one(x: i32) -> i32 { 
    x + 1 
} 
fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { 
    f(arg) + f(arg) 
} 
fn main() { 
    let answer = do_twice(add_one, 5); 
    println!("The answer is: {}", answer); 
}

函式指標實現了所有三個閉包 trait(Fn、FnMut 和 FnOnce),所以總是可以在呼叫期望閉包的函式時傳遞函式指標作為引數。傾向於編寫使用泛型和閉包 trait 的函式,這樣它就能接受函式或閉包作為引數。

例子://使用閉包和函式指標作為引數

fn wrapper_func<T>(t: T, v: i32) -> i32
    where T: Fn(i32) -> i32 {
        t(v)
}
fn func(v: i32) -> i32 {
    v + 1
}
fn main() {
    let a = wrapper_func(|x| x+1, 1);
    println!("a = {}", a);
    let b = wrapper_func(func, 1);
    println!("b = {}", b);
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

令狐一衝

相關文章