美文网首页人生几何?
Rust番外——代码写诗

Rust番外——代码写诗

作者: L我是小学生 | 来源:发表于2021-09-08 14:00 被阅读0次

Rust学习日记番外篇——代码写诗

中秋节即将来临啦~~提前祝大家月饼节快乐。今天看到了掘金的文章,有个代码写诗的活动,那我就小露一手了。

0x01 选定诗句

在掘金有下面几句诗可选。

  • 举头望明月,低头思故乡。
  • 万里无云镜九州,最团圆夜是中秋。
  • 明月几时有?把酒问青天。
  • 但愿人长久,千里共婵娟。
  • 我昨既赋白兔诗,笑他常娥诚自痴。
  • 今夜月明人尽望,不知秋思落谁家。
  • 举杯邀明月,对影成三人。
  • 忆对中秋丹桂丛。花在杯中。月在杯中。
  • 好时节,愿得年年,常见中秋月。
  • 一年逢好夜,万里见明时。
  • 嫦娥应悔偷灵药, 碧海青天夜夜心。
  • 定知玉兔十分圆,已作霜风九月寒。

看了下这些诗句,果然都是好诗。那我随便选一个吧。于是乎就选了**忆对中秋丹桂丛。花在杯中。月在杯中。 **这句诗出自宋代诗人辛弃疾的《一剪梅·中秋元月》。这句诗大致表述的意思是:“回忆昔日中秋,我置身在芳香的丹桂丛。花影映照在酒杯中,皓月也倒映在酒杯中。”感觉还挺美好的呢。

0x02 构思

我们首先看下这句诗有哪些东西。物有花,月,酒杯,丹桂丛,时间呢就是中秋啦。个人理解,这里花就是指的丹桂花,也就是可以理解为丹桂丛是好多花组成的。花在杯中。月在杯中。这两句感觉很好理解,翻译成代码就是把“花”和“月”加到酒杯中。

0x03 开始Coding

创建结构体和特性

首先创建花和月的结构体

/// 花
pub(crate) struct Flower {
    pub(crate) id: i32,
}

/// 月亮
pub(crate) struct Moon {}

考虑到杯中有花也有月,我这里就将杯子定义成了一个trait,让FlowerMoon去实现它。

/// 杯子
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 {};
    }
}

继续为FlowerMoon实现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番外——代码写诗

    Rust学习日记番外篇——代码写诗 中秋节即将来临啦~~提前祝大家月饼节快乐。今天看到了掘金的文章,有个代码写诗的...

  • vs code 配置rust开发环境

    实现的需求: 查看宏定义,代码补全, 安装这三个插件: Rust,Rust Test Lens,rust-anal...

  • Holochain 和 Mozilla CFO接触后的改变

    holochain的代码库中加入了holochain-rust(rust语言的实现) holochain为什么放弃...

  • Rust番外——0.1+0.2为什么不等于0.3 (上篇)

    Rust番外——0.1+0.2为什么不等于0.3 (下篇) 0x00 开篇 上一篇文章主要介绍了一些基本概念,既然...

  • 番外外外④

    相思一个健步,便迈着短短的狐狸腿准备跑起来了,却堪堪被归雪拉住了狐狸尾巴,一声惨痛的呼叫后,相思蔫了,趴在地上嘤嘤...

  • 番外外外①

    走了几天了。 也不知是怎么了,相思总是在归雪前脚离开的时候到。 她心想一路怎这么出卖自己的萌相,不知到雪陵的...

  • 番外外外②

    安陵辰渊放下笔,看着眼前的一纸婚书,叹了一口气。 “绾儿,还好吗?我如今终究是要成亲了,寻你千年,却终免不了要负你...

  • 番外外外③

    安陵辰渊在银渊雪原看了看,用神识扫了一番,忽然就发现了白鬼一族的气息,可又有几分紫族的味道在其中。安陵辰渊觉得有些...

  • 介绍Rust(2): 基本数字类型

    Rust(1) 介绍了rust的安装 编译代码以及包管理工具。这一篇文章将重点介绍Rust的基本基本数字类型。 我...

  • Rust,练练代码

    下载了一本书,练练。 一,代码 二,截图

网友评论

    本文标题:Rust番外——代码写诗

    本文链接:https://www.haomeiwen.com/subject/jksvwltx.html