Types 如何在指针类型上编写通用函数?
在中,我们具有以下功能:Types 如何在指针类型上编写通用函数?,types,rust,Types,Rust,在中,我们具有以下功能: fn over<X, F>(left: &[X], right: &[X], mut eq_fn: F) -> bool where F: FnMut(&X, &X) -> bool { left.len() == right.len() && left.iter().zip(right).all(|(x, y)| eq_fn(x, y)) } fn o
fn over<X, F>(left: &[X], right: &[X], mut eq_fn: F) -> bool
where F: FnMut(&X, &X) -> bool {
left.len() == right.len() && left.iter().zip(right).all(|(x, y)|
eq_fn(x, y))
}
fn over(左:&[X],右:&[X],多个等式fn:F)->bool
其中F:FnMut(&X,&X)->bool{
left.len()==right.len()&&left.iter().zip(right).all(|(x,y)|
等式(x,y))
}
碰巧,rustc
的AST表示使用了大量的语法::ptr::p
指针。如果我们使用闭包,那些对T的去引用,因此autoderef隐式地将它们强制为&T
。但是,如果尝试使用普通的fn
,则会出现类型不匹配:
错误:类型不匹配:类型`fn(&syntax::ast::Expr,&syntax::ast::Expr)->bool{eq_op::is_exp_equal}`实现了特性`for core::ops::FnMut`,但需要特性`for core::ops::FnMut`(预期结构`syntax::ptr::p`,找到结构`syntax::ast::Expr`)[E0281]
我是否可以将上述函数更改为同时接受
&[&T]
和&[p]
并自动将p
强制为&Expr
?如果是,如何实现?既&T
又p
实现Deref
,因此您可以在自己的范围内使用它:
use std::ops::Deref;
fn over<X, F, X1, X2>(left: &[X1], right: &[X2], mut eq_fn: F) -> bool
where X1: Deref<Target = X>,
X2: Deref<Target = X>,
F: FnMut(&X, &X) -> bool {
left.len() == right.len() && left.iter().zip(right).all(|(x, y)|
eq_fn(x, y))
}
使用std::ops::Deref;
fn在(左:&[X1],右:&[X2],多个eq_fn:F)->bool
其中X1:Deref,
X2:Deref,
F:FnMut(&X,&X)->bool{
left.len()==right.len()&&left.iter().zip(right).all(|(x,y)|
等式(x,y))
}