Rust学习日记番外篇——代码写诗
Rust学习日记番外篇——代码写诗
中秋节即将来临啦~~提前祝大家月饼节快乐。今天看到了掘金的文章,有个代码写诗的活动,那我就小露一手了。
0x01 选定诗句
在掘金有下面几句诗可选。
- 举头望明月,低头思故乡。
- 万里无云镜九州,最团圆夜是中秋。
- 明月几时有?把酒问青天。
- 但愿人长久,千里共婵娟。
- 我昨既赋白兔诗,笑他常娥诚自痴。
- 今夜月明人尽望,不知秋思落谁家。
- 举杯邀明月,对影成三人。
- 忆对中秋丹桂丛。花在杯中。月在杯中。
- 好时节,愿得年年,常见中秋月。
- 一年逢好夜,万里见明时。
- 嫦娥应悔偷灵药, 碧海青天夜夜心。
- 定知玉兔十分圆,已作霜风九月寒。
看了下这些诗句,果然都是好诗。那我随便选一个吧。于是乎就选了**忆对中秋丹桂丛。花在杯中。月在杯中。 **这句诗出自宋代诗人辛弃疾的《一剪梅·中秋元月》。这句诗大致表述的意思是:“回忆昔日中秋,我置身在芳香的丹桂丛。花影映照在酒杯中,皓月也倒映在酒杯中。”感觉还挺美好的呢。
0x02 构思
我们首先看下这句诗有哪些东西。物有花,月,酒杯,丹桂丛,时间呢就是中秋啦。个人理解,这里花就是指的丹桂花,也就是可以理解为丹桂丛是好多花组成的。花在杯中。月在杯中。这两句感觉很好理解,翻译成代码就是把“花”和“月”加到酒杯中。
0x03 开始Coding
创建结构体和特性
首先创建花和月的结构体
/// 花
pub(crate) struct Flower {pub(crate) id: i32,
}/// 月亮
pub(crate) struct Moon {}
考虑到杯中有花也有月,我这里就将杯子定义成了一个trait,让Flower和Moon去实现它。
/// 杯子
pub(crate) trait Cup {fn add_cup(&self);
}
因为中秋有丹桂丛,也有月亮,中秋我也定义成了一个trait,其实这里完全可以定义为一个struct。
/// 中秋
pub(crate) trait MidAutumn {/// 获得丹桂花fn get_dan_gui_flowers(&self) -> Vec<Flower>;/// 获得月亮fn get_moon(&self) -> Moon;
}
PS:将上面的代码保存到mid_autumn.rs
中。
main.rs
忆对中秋,这里的中秋是指昔日的中秋。那这里就创建结构体InThePastMidAutumn,实现MidAutumn的特性。
/// 昔日的中秋
struct InThePastMidAutumn {name: &'static str,
}impl MidAutumn for InThePastMidAutumn {// 生成丹桂从fn get_dan_gui_flowers(&self) -> Vec<Flower> {let mut vec: Vec<Flower> = Vec::new();for i in 0..5 {let flower = Flower { id: i };vec.push(flower)}return vec;}// 生成月亮fn get_moon(&self) -> Moon {return Moon {};}
}
继续为Flower和Moon实现Cup的特性。
/// 花在杯中
impl Cup for Flower {fn add_cup(&self) {println!("the flower id :{} in the cup!", self.id);}
}/// 月在杯中
impl Cup for Moon {fn add_cup(&self) {println!("the moon in the cup!");}
}
0x04 main函数调用
fn main() {let the_mid_autumn_day_in_the_past = InThePastMidAutumn { name: "Mid Autumn Day In the Past" };println!("{}", the_mid_autumn_day_in_the_past.name);for flower in the_mid_autumn_day_in_the_past.get_dan_gui_flowers().iter() {flower.add_cup();}the_mid_autumn_day_in_the_past.get_moon().add_cup();
}
代码运行结果:
Mid Autumn Day In the Past
the flower id :0 in the cup!
the flower id :1 in the cup!
the flower id :2 in the cup!
the flower id :3 in the cup!
the flower id :4 in the cup!
the moon in the cup!
0x05 代码改进
其实,我在写代码的过程中,发现月亮其实是只有一个。可以考虑将Moon作为单例来实现。单例实现Moon的代码如下:
impl Moon {pub fn GetInstance() -> &'static Moon {static mut MOON_INSTANCE: Option<Arc<Moon>> = None;unsafe {MOON_INSTANCE.get_or_insert_with(|| {Arc::new(Moon {})});MOON_INSTANCE.as_ref().unwrap()}}
}
0x06 写在最后
这次活动还是比较有意思的,我想大家应该有更好的想法,我在这里也仅仅是抛砖引玉了~~。如果大佬们有什么意见,可以在下面给我留言~
Rust学习日记番外篇——代码写诗相关推荐
- h5 php js实验总结,H5学习_番外篇_PHP数据库操作
1. 文件操作 1.1 打开关闭文件 fopen() resource fopen ( string filename, string mode [, bool use_include_path [, ...
- TikZ学习笔记番外篇: 使用tikzcd包绘制交换图
什么是交换图 映射的合成关系, 用图表示出来, 称为交换图. 怎么绘制 有很多方法可以绘制, 都是基于LaTeX\LaTeXLATEX 的, 这里我使用了TikZ\mathrm{T}i\mathrm ...
- php h5读写数据库,H5学习_番外篇_PHP数据库操作
php //打开文件 $rh = fopen('PHP_3.txt', 'r+'); //读取文件,第一个參数是文件句柄,第二个是读取方式 //计算文件大小(字节) $num = filesize(' ...
- cocos2d-x学习笔记番外篇05:如何快速屏蔽触摸
cocos2d-x有个问题,即使暂停CCScene运行,触摸仍然有效,有些菜单和按钮仍然会被触发. 所以有的时候我们要手动屏蔽触摸,尤其是在弹出计费画面的,或者使用一些本平台自带控件的时候. 做法有几 ...
- 【TDA2x学习】番外篇一、TDA2x工程学习手记
据振宇师兄说,TDA2HGBRQABCQ1是低配版TDA2x,对于EVE并没有4个,只有2个! 可运行在任意核上的Link:Dup link,Null link,Syn link等可以运行在任何核上 ...
- 【TDA2x学习】番外篇三、VisionSDK开发指南笔记
1.介绍 Vision Software Development Kit (SDK)是一种多处理器.多通道的用于TI家族ADAS SoCs的软件开发平台.该软件框架允许用户创建不同的ADAS应用程序数 ...
- 安卓开发学习日记第四天番外篇_用Kotlin炒冷饭——越炒越小_莫韵乐的欢乐笔记
安卓开发学习日记第四天番外篇--用Kotlin炒冷饭--越炒越小 前情提要 安卓开发学习日记第一天_Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学 ...
- OpenCV-Python实战(番外篇)——利用 SVM 算法识别手写数字
OpenCV-Python实战(番外篇)--利用 SVM 算法识别手写数字 前言 使用 SVM 进行手写数字识别 参数 C 和 γ 对识别手写数字精确度的影响 完整代码 相关链接 前言 支持向量机 ( ...
- OpenCV-Python实战(番外篇)——利用 KNN 算法识别手写数字
OpenCV-Python实战(番外篇)--利用 KNN 算法识别手写数字 前言 手写数字数据集 MNIST 介绍 基准模型--利用 KNN 算法识别手写数字 改进模型1--参数 K 对识别手写数字精 ...
最新文章
- Hibernate源码阅读2——Service Registry
- C++ 百炼成钢20
- 2012 Multi-University #8
- 啊这,C++现在学还来的及吗?
- erp 维护费 要交吗_ERP系统维护费
- Linux系统:常用Linux系统管理命令总结
- 自动改变文字大小和颜色的javascript效果
- Java并发编程系列
- 使用Linux版Redis
- activemq和kafka的区别
- mysql怎么连接数据连接池_Mysql数据库连接池
- OpenCV 1.0在VC6下安装与配置(附测试程序)
- 低速硬件接口之RS485接口自收发隔离多节点分享
- 服务器raid卡维修,服务器Raid卡故障|服务器RAID卡坏恢复数据
- React学习笔记之三(关于setState的若干问题及其讨论)
- S7-1200PLC—实验五 引风机和送风机的顺序控制
- 抖音短连接v.douyin.com/xxx 如何生成?
- 高德地图的标志放大_高德地图点标注的分布与缩放
- 联想天逸100-15ibd加装固态硬盘折腾记
- CSAPP - LAB 1 datalab
热门文章
- python界面小游戏贪吃蛇_用Python实现童年小游戏贪吃蛇
- 本科毕业设计格式规范
- 跨考408计算机学科专业基础综合,考研北京航空航天大学计算机学科专业基础综合(408)重难点解析.doc...
- 用AutoCAD画尺寸链小结
- 联想小新14pro锐龙版网卡rtl8852ae在ubunru18.04装网卡驱动
- 微信内置浏览器屏蔽网页链接怎么办,微信跳转外部浏览器的实现教程
- win7 打开图片提示内存不足
- 【电商专享】聚划算活动海量商品一键报名,省时省力!
- 服务数据对象简介(Java 环境中的下一代数据编程)
- 【C语言】for循环嵌套-等式推导