From b1ac9fb8ed90699474e911674f1a60b139563858 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 27 May 2026 12:48:54 +0800 Subject: Add Chinese tutorial for Step 1 of Mingling framework --- docs/play/sources/zh_CN/2-writing3.md | 317 ++++++++++++++++++++++++++++++++++ 1 file changed, 317 insertions(+) create mode 100644 docs/play/sources/zh_CN/2-writing3.md (limited to 'docs/play/sources/zh_CN/2-writing3.md') diff --git a/docs/play/sources/zh_CN/2-writing3.md b/docs/play/sources/zh_CN/2-writing3.md new file mode 100644 index 0000000..e2038e3 --- /dev/null +++ b/docs/play/sources/zh_CN/2-writing3.md @@ -0,0 +1,317 @@ +好的,现在开始编写 `ResultFruits` 的渲染器 + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +<<<<<<<<<< "我们将在此处编写渲染器代码" + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] <<<<<<<<<< "和 #[chain] 类似,渲染器函数叫 #[renderer]" + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits( <<<<<<<<<< "编写函数体" + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits <<<<<<<<<< "声明接收 ResultFruits 类型" + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) {} <<<<<<<<<< "一般情况下,渲染器什么都不用返回" + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + <<<<<<<<<< "接下来在此处编写渲染逻辑" +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = <<<<<<<<<< "首先我们先解包 ResultFruits" +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = <<<<<<<<<< "pack! 宏会自动为 ResultFruits 实现 AsRef trait" +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = result.as_ref(); <<<<<<<<<< "所以此处可以使用 as_ref()" +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = &*result; <<<<<<<<<< "当然,deref 也可以解包 ResultFruits" +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = &*result; + for fruit in vec { <<<<<<<<<< "接下来,循环遍历 ResultFruits 中的水果字符串" +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = &*result; + for fruit in vec { + <<<<<<<<<< "在循环中打印内容" + } +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = &*result; + for fruit in vec { + r_println!("{}", fruit) <<<<<<<<<< "使用 r_println 在循环中打印内容" + } +} + +gen_program!(); +``` + +--- + +```rust +use mingling::prelude::*; <<<<<<<<<< "r_println! 由 prelude 提供" + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = &*result; + for fruit in vec { + r_println!("{}", fruit) + } +} + +gen_program!(); +``` + +--- + +至此 `ResultFruits` 的渲染逻辑便已完成 + +```rust +use mingling::prelude::*; + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + // ... +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = &*result; + for fruit in vec { + r_println!("{}", fruit) + } +} + +gen_program!(); +``` -- cgit