本文简要介绍rust语言中 Function core::iter::once_with
的用法。
用法
pub fn once_with<A, F: FnOnce() -> A>(gen: F) -> OnceWith<F>
通过调用提供的闭包创建一个迭代器,该迭代器只懒惰地生成一个值。
这通常用于将单个值生成器调整为其他类型的迭代的 chain()
。也许您有一个几乎涵盖所有内容的迭代器,但您需要一个额外的特殊情况。也许您有一个适用于迭代器的函数,但您只需要处理一个值。
与 once()
不同,此函数将根据请求延迟生成值。
例子
基本用法:
use std::iter;
// one is the loneliest number
let mut one = iter::once_with(|| 1);
assert_eq!(Some(1), one.next());
// just one, that's all we get
assert_eq!(None, one.next());
与另一个迭代器链接在一起。假设我们要遍历 .foo
目录的每个文件,还要遍历配置文件 .foorc
:
use std::iter;
use std::fs;
use std::path::PathBuf;
let dirs = fs::read_dir(".foo").unwrap();
// we need to convert from an iterator of DirEntry-s to an iterator of
// PathBufs, so we use map
let dirs = dirs.map(|file| file.unwrap().path());
// now, our iterator just for our config file
let config = iter::once_with(|| PathBuf::from(".foorc"));
// chain the two iterators together into one big iterator
let files = dirs.chain(config);
// this will give us all of the files in .foo as well as .foorc
for f in files {
println!("{:?}", f);
}
相关用法
- Rust once用法及代码示例
- Rust option_env用法及代码示例
- Rust UdpSocket.set_multicast_loop_v6用法及代码示例
- Rust i64.overflowing_add_unsigned用法及代码示例
- Rust Box.downcast用法及代码示例
- Rust BTreeMap.last_key_value用法及代码示例
- Rust str.make_ascii_uppercase用法及代码示例
- Rust u128.checked_pow用法及代码示例
- Rust usize.wrapping_mul用法及代码示例
- Rust AtomicU8.fetch_sub用法及代码示例
- Rust PanicInfo.payload用法及代码示例
- Rust MaybeUninit.assume_init_mut用法及代码示例
- Rust String.try_reserve用法及代码示例
- Rust Mutex.new用法及代码示例
- Rust f32.exp用法及代码示例
- Rust Result.unwrap_or_else用法及代码示例
- Rust slice.sort_unstable_by_key用法及代码示例
- Rust Formatter.precision用法及代码示例
- Rust i128.log2用法及代码示例
- Rust OsStr.to_ascii_uppercase用法及代码示例
- Rust f32.hypot用法及代码示例
- Rust RefCell.try_borrow_unguarded用法及代码示例
- Rust i16.log10用法及代码示例
- Rust LowerExp用法及代码示例
- Rust HashSet.get_or_insert_with用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Function core::iter::once_with。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。