Rust impl-trait参数和泛型函数参数之间有什么区别?
。这和带有特征约束的泛型函数之间有什么区别吗Rust impl-trait参数和泛型函数参数之间有什么区别?,rust,Rust,。这和带有特征约束的泛型函数之间有什么区别吗 trait Foo {} fn func1(_: impl Foo) {} fn func2<T: Foo>(_: T) {} trait Foo{} fn func1(uu:impl Foo){} fn func2(u:T){} 两者都产生相同的组件,至少使用以下简单测试用例: trait Foo {} struct Bar; impl Foo for Bar {} fn func1(_: impl Foo) {} fn
trait Foo {}
fn func1(_: impl Foo) {}
fn func2<T: Foo>(_: T) {}
trait Foo{}
fn func1(uu:impl Foo){}
fn func2(u:T){}
两者都产生相同的组件,至少使用以下简单测试用例:
trait Foo {}
struct Bar;
impl Foo for Bar {}
fn func1(_: impl Foo) {}
fn func2<T: Foo>(_: T) {}
fn main() {
let x = Bar;
let y = func1(x); // or func2(x);
}
trait Foo{}
结构杆;
为条{}的impl Foo
fn func1(uu:impl Foo){}
fn func2(u:T){}
fn main(){
设x=Bar;
设y=func1(x);//或func2(x);
}
impl Trait
s作为函数参数被分解为匿名泛型参数。请参见以下内容:
展开impl Trait
以允许在参数中使用,其行为类似于匿名泛型参数
RFC中还有一个例子:
// These two are equivalent
fn map<U>(self, f: impl FnOnce(T) -> U) -> Option<U>
fn map<U, F>(self, f: F) -> Option<U> where F: FnOnce(T) -> U
本节解释了为现有功能添加其他语法的原因。简言之,这是为了在函数返回位置具有类似于
impl
traits的语法,从而提高可学习性,并改善人体工程学。Hm,谢谢。我没有读RFC;我只看到了github问题的链接,它来自于《铁锈中的本周》。@Boiethios RFC,甚至是合并的RFC,并不总是与当前版本的铁锈保持一致——它们可能还没有实现、实施了更改或被取代——所以这仍然是一个公平的问题。但是,在这种情况下,RFC是准确的。(当RFC合并后进行了更改时,您希望在RFC的跟踪问题中找到这一点。)
fn foo<T: Trait>(t: T)
fn bar(t: impl Trait)
foo::<u32>(0) // this is allowed
bar::<u32>(0) // this is not