impl和dyn用法
2024-09-01 19:42:03
先推荐一个链接
理解 Rust 2018 edition 的两个新关键字 —— impl 和 dyn
官方文档中,impl是限定泛型的语法糖,所以
trait Trait {} fn foo<T: Trait>(arg: T) {
} fn foo(arg: impl Trait) {
}
这2种情况是相同的
但是当impl做为返回值的时候就有不同了
trait Fly {
fn fly(&self) -> bool;
}
struct Duck;
impl Fly for Duck {
fn fly(&self) -> bool {
return true;
}
} fn foo<T>() -> T where T: Fly
{
Duck
}
fn main() {
}
这样编译会报错
expected type parameter `T`, found struct `std::boxed::Box`
将返回T改为Box<T>也仍然会报错
trait Fly {
fn fly(&self) -> bool;
}
struct Duck;
impl Fly for Duck {
fn fly(&self) -> bool {
return true;
}
} fn foo<T>() -> Box<T> where T: Fly
{
Box::new(Duck)
} fn main() {
}
这种情况用impl就不会报错
trait Fly {
fn fly(&self) -> bool;
}
struct Duck;
impl Fly for Duck {
fn fly(&self) -> bool {
return true;
}
} fn foo() -> impl Fly
{
Duck
} fn main() {
}
关于dyn
dyn用于&dyn Fly和Box(dyn Fly)这样的引用和智能指针的限定,表明Fly是一个trait而不是struct,不加dyn也不会报错。
最新文章
- C#开机自动启动程序代码
- EasyUi 方法传递多个参数值得方法
- LA 2678 Subsequence(二分查找)
- python(二)数据类型
- python setup.py uninstall
- MySQL【Update误操作】回滚(转)
- 1、Hibernate之生成SessionFactory源码追踪
- ECMAScript一元操作符
- jbpm4.4 spring整合
- POJ 2002 Squares 哈希
- C语言头文件的使用与写法
- 理解中WebAPI的属性和相关操作 FormBody和 FormUri等(WebAPI 二)
- 强烈推荐一款CSS导航菜单
- 原生js二级联动
- 设计模式(4)建造者模式/生成器模式(Builder)
- NHibernate教程(13)--立即加载
- java求素数
- UOJ #269. 【清华集训2016】如何优雅地求和
- VueJS第2天 初阅API(初识MarkDown)
- bzoj2002(lct模板)