- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Rust 切片目前不支持某些迭代器方法,即 take_while。为切片实现 take_while 的最佳方法是什么?
const STRHELLO:&'static[u8] = b"HHHello";
fn main() {
let subslice:&[u8] = STRHELLO.iter().take_while(|c|(**c=='H' as u8)).collect();
println!("Expecting: {}, Got {}",STRHELLO.slice_to(3),subslice);
assert!(subslice==STRHELLO.slice_to(3));
}
导致错误:
<anon>:6:74: 6:83 error: the trait `core::iter::FromIterator<&u8>` is not implemented for the type `&[u8]`
围栏中的这段代码: http://is.gd/1xkcUa
最佳答案
首先,您遇到的问题是 collect
是关于创建一个新 集合,而切片是关于引用现有数组中连续范围的项目(无论是否动态分配)。
恐怕由于特征的性质,原始容器(STRHELLO
)是一个连续范围的事实已经丢失,并且无法在之后重建事实。我还担心“通用”迭代器的任何使用都无法产生所需的输出;类型系统必须以某种方式承载以下事实:
这可能可行也可能不可行,但我现在没有看到它完成,而且我不确定它可以以何种方式优雅地实现。
另一方面,您可以自己动手做:
fn take_while<'a>(initial: &'a [u8], predicate: |&u8| -> bool) -> &'a [u8] { // '
let mut i = 0u;
for c in initial.iter() {
if predicate(c) { i += 1; } else { break; }
}
initial.slice_to(i)
}
然后:
fn main() {
let subslice: &[u8] = take_while(STRHELLO, |c|(*c==b'H'));
println!("Expecting: {}, Got {}",STRHELLO.slice_to(3), subslice);
assert!(subslice == STRHELLO.slice_to(3));
}
注意:'H' as u8
可以重写为 b'H'
,如下所示,与字符串对称。
关于rust - 如何在切片上实现等同于 take_while?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461947/
Rust 切片目前不支持某些迭代器方法,即 take_while。为切片实现 take_while 的最佳方法是什么? const STRHELLO:&'static[u8] = b"HHHello"
迭代器方法 take_while 将闭包作为其参数。 例如: fn main() { let s = "hello!"; let iter = s.chars(); let s
我有这个代码: for (auto e : foo | ::std::views::take_while([](const char* x) { return x != nullptr; }))
这是来自 Rust by Example 的示例: fn is_odd(n: u32) -> bool { n % 2 == 1 } fn main() { println!("Fin
我觉得很奇怪 Iterator::take_while取得迭代器的所有权。这似乎是一个有用的功能,能够获取满足某些功能的前 x 个元素,但仍保留原始迭代器中可用的其余元素。 我知道这与 take_wh
我觉得很奇怪 Iterator::take_while取得迭代器的所有权。这似乎是一个有用的功能,能够获取满足某些功能的前 x 个元素,但仍保留原始迭代器中可用的其余元素。 我知道这与 take_wh
#take_while 和#select 有什么区别 这两种方法不是做同样的事情吗? p [1,2,3,4].take_while { |e| e < 3 } # prints [1,2] p [1,
我想使用 Peekable作为新cautious_take_while的基础类似于take_while 的操作来自 IteratorExt但不消耗第一个失败的项目。 (有一个附带的问题,即这是否是一个
我想了解我应该为 take_while() 使用什么语法使用 futures::Stream; crate (0.1.25)。这是一段代码 ( on playground ): use futures
我正在尝试学习 nom 并遇到 take_while 不接受 is_digit 或任何其他 is_xxxx 的问题。 我有一些我想解析的行,看起来像这样 #123 = ABCDEF (...); 我想
TL;博士:我正在使用范围和来自 Ranges library 的相应范围适配器。 .两个系列适配器 std::views::take_while 和 std::views::filter 取一个谓词
这个问题在这里已经有了答案: How to use take_while with futures::Stream? (2 个答案) 关闭 4 年前。 我想在一个线程中运行事件循环并处理来自 UDP
我是一名优秀的程序员,十分优秀!