#box #beginner #tutorial #instructional #gift

giftbox

一个有趣的 Rust 库 giftbox,帮助 Rustlings 学习和探索泛型

1 个不稳定版本

0.1.1 2021 年 10 月 7 日

1051数据结构

MIT 许可证

2MB
227

包含 (WOFF 字体,290KB) noto-sans-kr-v13-korean-regular.woff,(WOFF 字体,190KB) docs/doc/FiraSans-Medium.woff,(WOFF 字体,135KB) docs/doc/FiraSans-Medium.woff2,(WOFF 字体,185KB) docs/doc/FiraSans-Regular.woff,(WOFF 字体,130KB) docs/doc/FiraSans-Regular.woff2,(WOFF 字体,69KB) docs/doc/SourceCodePro-Regular.ttf.woff 以及其他 11 项。更多

GiftBox 一个有趣的 Rust 库,帮助 Rustlings 学习和探索泛型。

目的

本库的目的是

  • 帮助 Rustlings 理解 Rust 泛型及其使用方法。
  • 扩展相关的基础主题,以支持 Rustling 对泛型的理解。
  • 提供一个有趣的库,用于在 Rustling 的动手实践中自我引导的项目,以协助学习过程。
  • 易于接近,支持性强,并鼓励参与 GiftBox 社区。

概念

本库利用 礼品盒 的概念来帮助解释 Rust 泛型。

想象一下一个真实的礼品盒。你可以在里面放任何礼物,用包装纸包装这个礼品盒,加一个蝴蝶结,还可以加一个礼物标签来显示它是给谁的,谁送的,以及一条简短的信息。这个礼品盒是泛型的,所以你可以合理地假设你可以用这个礼品盒来放任何礼物。

再想象一下,Rust 的编译器就像你当地购物中心里的礼品包装站。这个想象中的礼品包装站已经有了购物中心里所有类型礼物的礼品盒。它还可以根据需要为你制作的礼物制作新的礼品盒,这些礼物可能还没有在购物中心里。这个礼品包装站非常出色,几乎可以把你带来的任何礼物都放在礼品盒里。

一旦你的礼品盒里放满了礼物,它就可以进行礼品包装或不包装。如果进行了包装,它可以在礼品包装站使用不同的图案。你也可以选择是否添加一个礼物标签。

通过这种方式,礼品盒是泛型的。它足够泛型,以至于你可以用它来包装几乎无限数量的不同事物。我们将使用这个礼品盒的概念来描述 Rust 中的泛型。

将概念与 Rust 概念相关联

有时候,隐喻可以辅助学习过程。隐喻可以帮助抽象难以理解的概念,使学习者能够将这些难以理解的概念与他们已经熟悉的其他概念联系起来。正是通过这种方式,这个crate使用礼盒隐喻来描述Rust泛型是什么。

为了使隐喻的使用效果最佳,并帮助减少混淆,让我们将这些隐喻与我们试图学习的Rust概念联系起来

  • rustc Rust编译器

    在本例中,Rust编译器可以被视为包装礼物站。当编译具有泛型的程序时,编译器需要知道泛型被用于什么,以便分配适当数量的内存。同样,包装礼物站需要知道被包装的礼物(或者至少礼物的类型),以便知道应该使用多大尺寸的盒子。如果包装礼物站使用太大的盒子,盒子将不够高效,而且比实际需要更难携带。如果盒子太小,礼物可能根本无法放入盒子中!

  • 泛型 Rust泛型数据类型

    在Rust中,泛型是一种通用的类型或功能,可用于不同类型。《等等,什么?!》,你可能想知道。将泛型视为礼盒。礼盒通常足够通用,可以用于各种礼物,只要礼盒尺寸正确。礼盒的通用性使其能够在许多不同的环境中发挥作用。例如,礼盒可以用于许多不同的场合,如生日、圣诞节或周年纪念,可以存放许多不同类型的礼物,如书籍、玩具、糖果或许多不同的事物!因此,与Rust泛型类似,礼盒是现实生活中的“泛型”。

用法

将其添加到您的Cargo.toml

[dependencies]
giftbox = "0.1.1"

以下是一个简单示例,创建一个新的已填充的GiftBox,该盒子已包装,有蝴蝶结,并有礼物标签

use giftbox::giftbox::GiftBox;
use giftbox::gifttag::GiftTag;
use giftbox::giftwrap::GiftWrap;
use giftbox::patterns::Patterns;

let filled_box = GiftBox::fill(Some(["Toys", "Candy", "Money"]));
let tag = GiftTag::write(
    "Bob".to_string(),
    "Sally".to_string(),
    "Happy Cake Day!".to_string()
);
let wrapped_box = filled_box.wrap(
    Patterns::Polkadots,
    true,
    Some(tag)
);

assert_eq!(
     wrapped_box,
     {
         GiftWrap {
             contents:{
                 GiftBox::Gifts(["Toys", "Candy", "Money"])
             },
             pattern: Patterns::Polkadots,
             has_bow: true,
             tag: Some(
                 GiftTag {
                     recipient: "Bob".to_string(),
                     sender: "Sally".to_string(),
                     message: "Happy Cake Day!".to_string()
                 }
             )
         }
     }
);

参与和贡献

欢迎所有参与该项目。该项目旨在为所有新接触Rust的程序员带来乐趣和实用性。如果您发现这对您的Rust学习之旅有益,或者希望利用您的专业知识来增强该项目,请这样做!

请在提交拉取请求之前考虑提出问题。

该项目最受益的领域

  • 添加更多有用的入门示例、功能和功能。
  • 增强和编写更多适合初学者的文档。
  • 创建其他利用GiftBox的crate,以便更好地理解Rust生态系统中泛型的价值。
  • 寻找和报告错误和问题。

最重要的是,通过与他人分享并建立社区来使该项目受益最大!

许可证

本项目受MIT许可证许可。

无运行时依赖