當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust from_fn用法及代碼示例


本文簡要介紹rust語言中 Function std::iter::from_fn 的用法。

用法

pub fn from_fn<T, F>(f: F) -> FromFn<F> where    F: FnMut() -> Option<T>,

創建一個新的迭代器,每次迭代都調用提供的閉包 F: FnMut() -> Option<T>

這允許創建具有任何行為的自定義迭代器,而無需使用更冗長的語法來創建專用類型並為其實現 Iterator 特征。

請注意,FromFn 迭代器不會對閉包的行為做出假設,因此保守地不會實現 FusedIterator ,或從其默認 (0, None) 覆蓋 Iterator::size_hint()

閉包可以使用捕獲及其環境來跟蹤迭代中的狀態。根據迭代器的使用方式,這可能需要在閉包上指定 move 關鍵字。

例子

讓我們重新實現 module-level documentation 中的計數器迭代器:

let mut count = 0;
let counter = std::iter::from_fn(move || {
    // Increment our count. This is why we started at zero.
    count += 1;

    // Check to see if we've finished counting or not.
    if count < 6 {
        Some(count)
    } else {
        None
    }
});
assert_eq!(counter.collect::<Vec<_>>(), &[1, 2, 3, 4, 5]);

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Function std::iter::from_fn。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。