pub trait Summary {
fn summarize_author(&self) -> String; fn summarize(&self) -> String {
format!("(Default Read more from {}...)", self.summarize_author())
}
} pub struct NewsArticle {
pub headline: String,
pub location: String,
pub author: String,
pub content: String,
} pub struct Tweet {
pub username: String,
pub content: String,
pub reply: bool,
pub retweet: bool,
} impl Summary for Tweet {
fn summarize_author(&self) -> String {
format!("@{}", self.username)
}
} impl Summary for NewsArticle {
fn summarize_author(&self) -> String {
format!("@{}", self.author)
} fn summarize(&self) -> String {
format!("(NewsArticle Read more from {}...)", self.summarize_author())
}
} impl Summary for String {
fn summarize_author(&self) -> String {
format!("@{}", &self)
} fn summarize(&self) -> String {
format!("(Read more from {}...)", self.summarize_author())
}
} impl Summary for i64 {
fn summarize_author(&self) -> String {
format!("@{}", &self)
} fn summarize(&self) -> String {
format!("(Read more from {}...)", self.summarize_author())
}
} pub fn notify(item: impl Summary) {
println!("Breaking news! {}", item.summarize());
} fn main(){
let article = NewsArticle {
headline: String::from("Penguins win the Stanley Cup Championship!"),
location: String::from("Pittsburgh, PA, USA"),
author: String::from("Iceburgh"),
content: String::from("The Pittsburgh Penguins once again are the best
hockey team in the NHL."),
}; println!("New article available! {}", article.summarize());
notify(article); let tweet = Tweet {
username: String::from("horse_ebooks"),
content: String::from("of course, as you probably already know, people"),
reply: false,
retweet: false,
}; println!("1 new tweet: {}", tweet.summarize());
notify(tweet);
notify(1000);
notify(String::from("你好,特质,你很强")); }

  

使用trait,语言表达很强啊。  越来越喜欢它了。

总结: 任何类型都可以实现特质。 类似于接口。

rust 神奇的特质的更多相关文章

  1. Rust到底值不值得学--Rust对比、特色和理念

    前言 其实我一直弄不明白一点,那就是计算机技术的发展,是让这个世界变得简单了,还是变得更复杂了. 当然这只是一个玩笑,可别把这个问题当真. 然而对于IT从业者来说,这可不是一个玩笑.几乎每一次的技术发 ...

  2. Rust初步(六):在C#中使用Rust组件

    上一篇文章,我们通过实例比较了一下C#和Rust的性能表现,应该说在Release模式下面,Rust进行计算密集型的运算还是有些比较明显的优势的.那么,我们有没有可能,在C#中做一些快速应用开发,而一 ...

  3. Rust语言学习笔记(7)

    模块 // 兄弟模块 mod network { fn connect() { } } mod client { fn connect() { } } // 父子模块 mod network { fn ...

  4. Scala入门3(特质线性化)

    尝试设计一套特质,灵活的改动整数队列.队列有两种操作:put把整数放入队列,get从尾部取出它们.队列是先进先出的,get应该依照入队列的顺序取数据.提示:可以用mutable.ArrayBuffer ...

  5. 刷完欧拉计划中难度系数为5%的所有63道题,我学会了Rust中的哪些知识点?

    我为什么学Rust? 2019年6月18日,Facebook发布了数字货币Libra的技术白皮书,我也第一时间体验了一下它的智能合约编程语言MOVE,发现这个MOVE是用Rust编写的,看来想准确理解 ...

  6. 通过欧拉计划学Rust(第1~6题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以开始了Rust的快速入门学习. 看了一下网上有关Rust的介绍,都 ...

  7. rust 生命周期2

    之前定义的结构体,都是不含引用的. 如果想定义含引用的结构体,请定义生命周期注解 #[warn(unused_variables)] struct ImportantExcerpt<'a> ...

  8. Rust之路(3)——数据类型 下篇

    [未经书面同意,严禁转载] -- 2020-10-14 -- 架构是道,数据是术.道可道,非常道:术不名,不成术!道无常形,术却可循规. 学习与分析数据类型,最基本的方法就是搞清楚其存储原理,变量和对 ...

  9. 实践解析丨Rust 内置 trait:PartialEq 和 Eq

    摘要:Rust 在很多地方使用了 traits, 从非常浅显的操作符重载, 到 Send, Sync 这种非常微妙的特性. Rust 在很多地方使用了 traits, 从非常浅显的操作符重载, 到 S ...

随机推荐

  1. 利用SQL语句替换织梦DedeCms数据库内容

    找到 然后把命令放在 执行即可,慎重执行 替换文章标题 UPDATE `dede_archives` SET `title`=replace(title,'我我我','你你你') 替换文章正文 UPD ...

  2. 搭建本地的yum仓库-较简单

    1.创建目录安装软件程序 1.在/root路径下创建123.sh文件,把此文件复制到123.sh里,  sh 123.sh2.首选安装nginx,作为web展示 3.强力清除老版本残留rpm -e n ...

  3. Intellij IDEA 2020.1.1 破解 永久有效 亲测100%成功

    申明:本教程 WebStorm 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除. 前言 作为一个有强迫症的码农,怎么能忍受自己的开发工具跟不上潮流呢?笔者以前一直用 ...

  4. 小智的糖果(Candy) 51nod 提高组试题

    luogu AC通道! (官方数据) 题目描述 小智家里来了很多的朋友,总共有N个人,站成一排,分别编号为0到N-1,小智要给他们分糖果.但 是有的朋友有一些特殊的要求,有的人要求他左右的两个人(左边 ...

  5. [计划任务 - Linux]三分钟学会cron

    cron——计划任务,是任务在约定的时间执行已经计划好的工作,是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业. 也就是说cron只适合于linux系统,用windows电脑的同学 ...

  6. Vue 全选/取消全选,反选/取消反选

    这是一个组件: <template> <div> <div> <input type="checkbox" v-model="i ...

  7. Jenkins漏洞利用复现

    一.未授权访问 访问url: http://172.16.20.134:8080/script 命令执行 println "ls -al".execute().text 也可以利用 ...

  8. Redis 单节点百万级别数据 读取 性能测试.

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 这里先进行造数据,向redis中写入五百万条数据,具体方式有如下三种: 方法一:(Lua 脚本) vim ...

  9. Mysql安装与设置用户名、密码

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 关于MySQL程序中数据库调度的流程图解: ​ 1-MySql数据库的安装 ​ 安装前要注意,看看当前系 ...

  10. Java实现 蓝桥杯 算法训练 画图(暴力)

    试题 算法训练 画图 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色. 下图给出了一个画了两个矩 ...