- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个(键,类型)的排序向量,它仅按键排序。
我想出了下面的代码:
struct SortedVec<K, T> {
data: Vec<(K, T)>
}
impl<K: Ord, T> SortedVec<K, T> {
fn new() -> SortedVec<K, T> {
SortedVec { data: Vec::new() }
}
fn add(&mut self, k: K, t: T) {
self.data.push((k, t));
self.data.sort_by(|a, b| a.0.cmp(&b.0));
}
fn find<P>(&self, predicate: P) -> Option<&(K, T)> where P: FnMut(&(K, T)) -> bool {
self.data.iter().find(predicate)
}
}
但这不会编译并出现以下错误:
anon>:16:30: 16:45 error: the trait `for<'r> core::ops::FnMut<(&'r &(K, T),)>` is not implemented for the type `P` [E0277]
anon>:16 self.data.iter().find(predicate)
^~~~~~~~~~~~~~~
<anon>:16:30: 16:45 error: the trait `for<'r> core::ops::FnOnce<(&'r &(K, T),)>` is not implemented for the type `P` [E0277]
<anon>:16 self.data.iter().find(predicate)
^~~~~~~~~~~~~~~
error: aborting due to 2 previous errors
playpen: application terminated with error code 101
我找不到类型“P”的任何问题。
我该如何解决?
最佳答案
让我们比较 P
上的边界和需要编译器的边界:
// P
FnMut( &(K, T)) -> bool
// required
for<'r> FnMut(&'r &(K, T)) -> bool
如果您更改 where
子句以匹配编译器要求的签名,它就可以工作(see here)。
我相信额外的引用(和生命周期)是通过使用 iter
引入的,因此与迭代器的生命周期相关联,但不要相信我的话。
不过,我要指出的是,Vec
有一个 binary_search_by
这必然比线性 find
更有效:
fn binary_search_by<F>(&self, f: F) -> Result<usize, usize>
where F: FnMut(&T) -> Ordering
您可能希望改用它,因为您麻烦地对其进行排序。
关于rust - 特性 `for<' r> core::ops::FnMut<( &'r &(K, T),)>` 没有为类型 `P` 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288001/
给定一个 Rc ,在迭代器上映射时如何使用它?例如: use std::rc::Rc; fn main() { let f = Rc::new(|x| x); let v = vec!
use std::cell::RefCell; use std::rc::Rc; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; fn
我有第三方库,代码如下: pub struct Foo { t: T } impl Foo where T: 'a + FnMut() -> &'a [u8] { pub fn from_ca
我正在尝试拥有一组可以采用 CharPredicate 的函数这是我自己的特征,通过 FnMut(char) -> bool 实现, Range , char等 目标是能够像这样调用助手: scan_
我有以下代码: struct Callable { callable: Box, } struct Parameters { text: &'a str, } struct Conte
这是一个可以组合Fn 闭包的compose 函数: fn compose(f: F1, g: F2) -> Box T3 + 'a> where F1: Fn(T1) -> T2 + 'a,
我正在为 Rust 编写一个 Phoenix 客户端库,利用来自 rust-websockets 的异步 websocket 客户端.现在我无法弄清楚如何将回调函数传递到处理 websocket 流量
pub fn create_future( notificator: mpsc::Sender, proxy: Proxy, ) -> impl Future { proxy.
背景:我试图避免使用 Mutex/RefCell/Option在嵌入式系统的中断处理程序中跳舞。我不想使用堆(而且我不认为它应该是必要的——但随时告诉我错误)。我不能使用 std .我看过 corte
如何在需要 FnMut 类型的上下文中使用盒装闭包,例如 pub fn main() { for n in (0..10).map(Box::new(|i| i * 2)) { print
我有一个类似这样的struct: struct Foo { callbacks: Vec, } 我想调用每个回调,但我的尝试不起作用: fn foo(&mut self) { for
这是来自 Rust by Example 的示例: pub trait Iterator { // The type being iterated over. type Item;
我正在尝试返回一个以 &Any 作为参数的闭包。以下代码返回编译器错误。 trait Selector { fn id(&self) -> i64; fn selector(&self
我想使用 FnMut(&[f32]) -> f32,为了不复制/粘贴完整签名,我想引入某种别名,但是 type Boo = FnMut(&[f32]) -> f32; fn f(mut f: F) {
自从 Iter's "all" fn takes type FnMut是否可以在检查条件和短路时更新元素?虽然我知道它不应该这样做,但是是什么阻止它更新值? fn main() { let a
我有以下代码片段,它实现了某种发射器结构: type Callback = Option; struct Emitter { cb: Callback } impl Emitter { fn
我已经通用实现了callback_list_stream,但是我似乎无法以专门的方式使用它。如果我按照T复制/粘贴代码,则该代码有效。 use futures::channel::mpsc::Rece
我有一个函数,collect_n ,返回 Future反复polls一个 futures::sync::mpsc::Receiver并将结果收集到一个向量中,并使用该向量进行解析。问题是它消耗了 Re
我正在尝试创建一个简单的程序,其中包含一个包含逐渐清空自身的集合的闭包: fn main() { let vector = vec![1, 2, 3]; let mut allow_o
基本上,我想编写一个返回闭包的函数。我怎样才能做到这一点而不必返回 Box ? 来自closures chapter of the rust book ,我读到闭包只是结构的语法糖和 FnOnce 的
我是一名优秀的程序员,十分优秀!