<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>asfman.eth</title>
        <link>https://paragraph.com/@asfman</link>
        <description>undefined</description>
        <lastBuildDate>Sun, 14 Jun 2026 09:42:35 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[胆固醇和脂肪]]></title>
            <link>https://paragraph.com/@asfman/jIoucOdvmSqkM3z22mhu</link>
            <guid>jIoucOdvmSqkM3z22mhu</guid>
            <pubDate>Tue, 06 Dec 2022 04:33:17 GMT</pubDate>
            <description><![CDATA[胆固醇 胆固醇是存在于人或动物的组织中的⼀种脂肪类的物质。它在细胞膜结构的形 成，维生素 D 和某些激素的合成中起到重要作用。 肝脏负责合成我们身体所需 要的所有胆固醇。体内胆固醇过多会导致动脉粥样硬化。总胆固醇的正常值应 该在 200 毫克/分升以下。 总胆固醇包括所有溶解在低密度脂蛋白，高密度脂蛋 白和甘油三酯脂粒里的胆固醇。 低密度脂蛋白胆固醇 低密度脂蛋白(LDL)携带着胆固醇在血液里流动，把它们送到用胆固醇来生成细 胞的地方， 同时也把用不了的胆固醇留在了动脉血管的管壁上, 形成粥样硬化斑 块 。因为这个原因，低密度脂蛋白（LDL）也常常被称为“坏胆固醇”。对于⼀ 个糖尿病患者来说， 低密度脂蛋白应当控制在 100 毫克/分升以下。 如果⼀个 糖尿病患者同时也有心脏病，低密度脂蛋白则应当控制在 70 毫克/分升以下。 高密度脂蛋白胆固醇 高密度脂蛋白 (HDL)在血液中流动时, 会收集留在动脉血管壁上的粥样硬化斑块 里的胆固醇，把它们带到肝脏做再处理或排出体外。因此，高密度脂蛋白也常 常被称为“好胆固醇” 。因为它像⼀个垃圾工，把多余的胆固醇从血管壁和其 它地方带回到肝...]]></description>
            <content:encoded><![CDATA[<p><strong>胆固醇</strong></p><p>胆固醇是存在于人或动物的组织中的⼀种脂肪类的物质。它在细胞膜结构的形</p><p>成，维生素 D 和某些激素的合成中起到重要作用。 肝脏负责合成我们身体所需</p><p>要的所有胆固醇。体内胆固醇过多会导致动脉粥样硬化。总胆固醇的正常值应</p><p>该在 200 毫克/分升以下。 总胆固醇包括所有溶解在低密度脂蛋白，高密度脂蛋</p><p>白和甘油三酯脂粒里的胆固醇。</p><p><strong>低密度脂蛋白胆固醇</strong></p><p>低密度脂蛋白(LDL)携带着胆固醇在血液里流动，把它们送到用胆固醇来生成细</p><p>胞的地方， 同时也把用不了的胆固醇留在了动脉血管的管壁上, 形成粥样硬化斑</p><p>块 。因为这个原因，低密度脂蛋白（LDL）也常常被称为“坏胆固醇”。对于⼀</p><p>个糖尿病患者来说， 低密度脂蛋白应当控制在 100 毫克/分升以下。 如果⼀个</p><p>糖尿病患者同时也有心脏病，低密度脂蛋白则应当控制在 70 毫克/分升以下。</p><p><strong>高密度脂蛋白胆固醇</strong></p><p>高密度脂蛋白 (HDL)在血液中流动时, 会收集留在动脉血管壁上的粥样硬化斑块</p><p>里的胆固醇，把它们带到肝脏做再处理或排出体外。因此，高密度脂蛋白也常</p><p>常被称为“好胆固醇” 。因为它像⼀个垃圾工，把多余的胆固醇从血管壁和其</p><p>它地方带回到肝脏处理。 健康妇女的高密度脂蛋白值应在 55 毫克/分升以上，</p><p>健康男士的高密度脂蛋白值应在 45 毫克/分升以上。</p><p><strong>甘油三酯</strong></p><p>甘油三酯是与胆固醇⼀起在血液中流动的脂肪。甘油三酯(也称血脂)的正常指标</p><p>应在 150 毫克/分升以下。含甘油三酯的脂肪颗粒携带着甘油三酯在全身流动：</p><p>从肠道到肝脏，从肝脏到脂肪和其它细胞，再从脂肪和其它细胞回到肝脏。 含</p><p>甘油三酯的脂肪颗粒中的⼀小部分（约五分之⼀）是胆固醇。所以甘油三酯升</p><p>高时，总胆固醇也会随之升高; 甘油三酯降低时，总胆固醇也会降低。</p><p><strong>食物中的胆固醇</strong></p><p>所有来自动物的食物中都有胆固醇， 包括肉、鸡蛋、鱼、家禽和乳制品。 ⼀些</p><p>动物食物中含有大量的胆固醇， 另外⼀些动物食物中的胆固醇则很少。 来自植</p><p>物的食品，如亚麻子，核桃，大豆，豆油， 菜籽油， 豆腐和豆浆， 不含胆固</p><p>醇。 过多摄入食物胆固醇会使血液胆固醇升高，从而增加发心血管疾病的危险</p><p>性。</p><p><strong>饱和脂肪</strong></p><p>在室温下成固体状的脂肪是饱和脂肪。饱和脂肪存在于动物产品中，如猪油、</p><p>动物脂肪、鸡皮、黄油、冰激凌、全脂牛奶、奶酪等。 热带植物油(椰子油、棕</p><p>榈油)也是高度饱和的。食用饱和脂肪易于导致血液中胆固醇浓度升高，从而增</p><p>加心血管疾病的发病可能性。</p><p><strong>氢化脂肪和反链脂肪</strong></p><p>氢化是⼀种通过加氢而把液体植物油变成半固体或固体的脂肪的化学反应。用</p><p>这种方法制成的植物脂肪（如人造奶油）的碳链结构与自然饱和脂肪的的碳链</p><p>结构不⼀样，故而被称为反链脂肪。反链脂肪常见于⼀些人造奶油制品、饼</p><p>干、小点心、零食、或餐馆的油炸食品中.</p><p>检查氢化脂肪的成分。目前⼀些食品的商标也列出了总脂肪比例中反链脂肪的</p><p>含量。摄入反链脂肪往往会降低高密度脂蛋白胆固醇--“好胆固醇”，同时增加</p><p>低密度脂蛋白胆固醇--“坏胆固醇”。因此这些反链脂肪的摄入应该被严格限</p><p>制。像饱和脂肪和胆固醇⼀样, 反链脂肪也可以使人体内的低密度脂蛋白(俗称坏</p><p>胆固醇，英语: LDL cholesterol)含量增高, 从而使发生冠心病的危险大幅度增加</p><p><strong>多不饱和脂肪</strong></p><p>多不饱和脂肪是指在室温下呈液态的植物油。如：红花，玉米，大豆， 棉花籽</p><p>和葵花籽油. 摄入多元不饱和脂肪会降低 LDL--“坏胆固醇”，但如果过多摄入</p><p>也会降低 HDL --“好胆固醇”.然而，当用它们代替饱和或反链脂肪时，它们会</p><p>增加好胆固醇与坏胆固醇的比率。因此多不饱和脂肪被认为是 健康心脏的好选</p><p>择。</p><p><strong>单不饱和脂肪</strong></p><p>单不饱和脂肪是在室温下呈液态的植物油。如：橄榄油、花生油 、鳄梨、 核桃</p><p>和菜籽油. 日常饮食中用单不饱和脂肪替代饱和脂肪可以降低 LDL --“ 坏胆固</p><p>醇”而不降低 HDL--“好胆固醇”。这使得单不饱和脂肪成为健康心脏的⼀个好</p><p>选择。</p><p><strong>Ω-3 脂肪酸</strong></p><p>Ω-3 脂肪酸能够降低甘油三酯和总胆固醇，同时提高 HDL--“好胆固醇”的水</p><p>平，从而有效预防高血压、冠心病和中风。它们还可以阻止有害的血凝块形</p><p>成。Ω-3 脂肪酸可以在肥胖的鱼类中找到，如：金枪鱼、鲑鱼、鲭鱼、青鱼、</p><p>沙丁鱼、海鲈鱼、鲳参鱼、湖鳟鱼、和比目鱼。素食主义者Ω-3 脂肪酸的来源</p><p>包括亚麻籽、胡桃、大豆及它们各自的油。其他的来源还包括菜籽油、豆腐和</p><p>豆浆。</p><p>降低冠心病风险的自我保护策略</p><p>♥ 减肥</p><p>如果你超重，减肥可以降低你的总胆固醇、LDL 胆固醇及甘油三酯水平，从而降</p><p>低你发生冠心病的风险。另外，减肥对控制血压也有帮助。</p><p>♥ 减少饱和脂肪、氢化脂肪和反链脂肪的摄入</p><p>限制这些脂肪的摄入是你可以采取的饮食步骤中最重要的⼀步，因为这些脂肪</p><p>能够在很大意义上增加血浆胆固醇水平。</p><p>小贴士</p><p>• 避免摄入肥肉如：熏肉、香肠、排骨和热狗。</p><p>• 选择肉中的瘦肉部分如：“腰肉”和“round”。</p><p>• 每天摄入 6-8 盎司瘦肉、家禽或鱼。</p><p>• 剔去肉中可见的肥肉，家禽应去皮。</p><p>• 尝试素食者的选择：豆制品和豆腐。</p><p>• 摄入无脂或低脂奶制品。</p><p>• 严格限制奶酪摄入（以低脂或无脂奶酪代替）</p><p>• 避免摄入奶油汤汁和奶油调味汁</p><p>• 严格限制黄油和硬质人造奶油，选择贴有“无反链脂肪”的人造黄油代</p><p>之。</p><p>• 避免摄入热带油（椰子油和棕榈油）</p><p>• 选择液态油以代替固态油。</p><p>• 试着减少脂肪或无脂的色拉食品的摄入。</p><p>• 避免摄入油炸食品。</p><p>• 避免在快餐店进餐。</p><p>• 阅读食品标签并选择低饱和脂肪、低反链脂肪、低氢化脂肪的食品。</p><p>• “低脂“选择即：每盎司肉或奶油含 3 克脂肪，或每份其他食品含 3 克</p><p>脂肪。</p><p>♥ 进食任何脂肪时均应节制</p><p>过多热量摄入会导致肥胖。所有脂肪都是高热量食品，因此应当有节制的食用</p><p>以控制体重。尽管单不饱和脂肪和多不饱和脂肪在脂肪中是好的类型，国际胆</p><p>固醇教育项目仍推荐总脂肪的摄入不应超过每天热量摄入的 35% 。</p><p>♥ 限制每日膳食中胆固醇摄入</p><p>尽管膳食中胆固醇并不像饱和脂肪、氢化脂肪和反链脂肪那样影响血胆固醇水平，</p><p>但是当我们摄入高胆固醇食品时仍应节制。</p><p>• 保证你摄入的肉不大于你的手掌。</p><p>• 限制器官如肝脏、肾脏和心脏的摄入。</p><p>• 摄入蛋黄应节制，以鸡蛋替代品或蛋白替代。</p><p>• 摄入虾和鱿鱼应当节制。</p><p>♥ 摄入更多的可溶解纤维</p><p>增加燕麦、干豆、豌豆,、和小扁豆的摄入。每天摄入的蔬菜和水果中至少包含</p><p>5 份以上食品。这些食品都可以提供能够降低血胆固醇水平的可溶纤维。</p><p>♥ 多运动</p><p>运动有助于提高 HDL——“好胆固醇”，并且有助于降低总胆固醇、LDL 胆固</p><p>醇和甘油三酯的水平；运动对于获得和维持健康的体重也很重要；另外运动能</p><p>降低血压、改善循环。运动不需要很激烈，散步就是很好的运动形式。试着每</p><p>天至少运动 30 分钟。为了达到最理想的健康状态，专家推荐每天累计的运动时</p><p>间为 60 分钟。</p><p>♥ 不要吸烟</p><p>吸烟是导致心脏疾病的最大得危险因素之⼀。吸烟也是高度致癌的，并引起其</p><p>它严重的健康隐患。</p>]]></content:encoded>
            <author>asfman@newsletter.paragraph.com (asfman.eth)</author>
        </item>
        <item>
            <title><![CDATA[eat foods, most plants, not too much]]></title>
            <link>https://paragraph.com/@asfman/eat-foods-most-plants-not-too-much</link>
            <guid>N23Qp8oHbmKloqHjSj1b</guid>
            <pubDate>Tue, 06 Dec 2022 04:28:49 GMT</pubDate>
            <description><![CDATA[游离糖：所有人为添加的单糖（葡萄糖、果糖、半乳糖）、二糖，以及天然存在蜂蜜、天然糖浆、果汁中富集而”游离“的糖。 空热量：除了能够给我们热量之外，没有其他已知的营养益处的食物。 简单糖：单糖和二糖 寡糖：3-11单糖组成 多糖：11个单糖以上组成 单糖： 果糖在肝内部分转化为葡萄糖,以糖原形式贮存,为机体提供能量。其余一部分代谢为脂肪酸,促进肝中甘油三酯的合成 食入果糖过多 → 肝细胞过度加工 → 蛋白质生成受影响 → 产生半成品 → 尿酸 葡萄糖是血糖的唯一形式，也是短期存能量糖原的唯一链子的组成单元]]></description>
            <content:encoded><![CDATA[<p>游离糖：所有人为添加的单糖（葡萄糖、果糖、半乳糖）、二糖，以及天然存在蜂蜜、天然糖浆、果汁中富集而”游离“的糖。</p><p>空热量：除了能够给我们热量之外，没有其他已知的营养益处的食物。</p><p>简单糖：单糖和二糖</p><p>寡糖：3-11单糖组成</p><p>多糖：11个单糖以上组成</p><p><strong>单糖：</strong></p><p><strong>果糖在肝内部分转化为葡萄糖,以糖原形式贮存,为机体提供能量。其余一部分代谢为脂肪酸,促进肝中甘油三酯的合成</strong></p><p>食入果糖过多 → 肝细胞过度加工 → 蛋白质生成受影响 → 产生半成品 → 尿酸</p><p>葡萄糖是血糖的唯一形式，也是短期存能量糖原的唯一链子的组成单元</p>]]></content:encoded>
            <author>asfman@newsletter.paragraph.com (asfman.eth)</author>
        </item>
        <item>
            <title><![CDATA[关于Rust模块系统的清晰解释]]></title>
            <link>https://paragraph.com/@asfman/rust</link>
            <guid>BHXTorMINRXisWfddgBl</guid>
            <pubDate>Tue, 01 Nov 2022 10:51:51 GMT</pubDate>
            <description><![CDATA[Rust的模块(module)系统相当令人困惑，这也给很多初学者带来了挫败感。 在本文中，我将会通过实际的例子来解释模块系统以便于让你清晰地理解它是怎样工作的并且能够快速在自己的项目中应用。 由于Rust的模块系统比较独特，我希望读者以开放性思维来进行阅读，并且尽量不要将其与其他语言中的模块的工作方式进行比较。 让我们使用下面的文件结构来模拟一个真实世界中的项目:my_project ├── Cargo.toml └─┬ src ├── main.rs ├── config.rs ├─┬ routes │ ├── health_route.rs │ └── user_route.rs └─┬ models └── user_model.rs 下面是一些使用我们的模块的不同方式： 下面的3个例子应该足以解释Rust的模块系统是如何工作的。 示例1 让我们从第一个例子开始 —— 在main.rs中导入config.rs。// main.rs fn main() { println!("main"); } // config.rs fn print_config() { println...]]></description>
            <content:encoded><![CDATA[<p>Rust的模块(module)系统相当令人困惑，这也给很多初学者带来了挫败感。</p><p>在本文中，我将会通过实际的例子来解释模块系统以便于让你清晰地理解它是怎样工作的并且能够快速在自己的项目中应用。</p><p>由于Rust的模块系统比较独特，我希望读者以开放性思维来进行阅读，并且尽量不要将其与其他语言中的模块的工作方式进行比较。</p><p>让我们使用下面的文件结构来模拟一个真实世界中的项目:</p><pre data-type="codeBlock" text="my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  ├── config.rs
  ├─┬ routes
  │ ├── health_route.rs
  │ └── user_route.rs
  └─┬ models
    └── user_model.rs
"><code>my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  ├── config.rs
  ├─┬ routes
  │ ├── health_route.rs
  │ └── user_route.rs
  └─┬ models
    └── user_model.rs
</code></pre><p>下面是一些使用我们的模块的不同方式：</p><p>下面的3个例子应该足以解释Rust的模块系统是如何工作的。</p><p>示例1</p><p>让我们从第一个例子开始 —— 在main.rs中导入config.rs。</p><pre data-type="codeBlock" text="// main.rs
fn main() {
  println!(&quot;main&quot;);
}
// config.rs
fn print_config() {
  println!(&quot;config&quot;);
}
"><code><span class="hljs-comment">// main.rs</span>
<span class="hljs-function">fn <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
  println!(<span class="hljs-string">"main"</span>);
}
<span class="hljs-comment">// config.rs</span>
<span class="hljs-function">fn <span class="hljs-title">print_config</span><span class="hljs-params">()</span> </span>{
  println!(<span class="hljs-string">"config"</span>);
}
</code></pre><p>很多人常犯的第一个错误是因为我们有像config.rs，health_route.rs这样的文件，所以我们就认为这些文件就是模块(module)且可以在其他的文件中将其导入。</p><p>下面是从我们的视角(文件系统树(file system tree))看到的内容和从编译器的角度(模块树(module tree))看到的内容：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/af1bb34abc9fdb54f7bc82c3c236dc7334cea33b4b35a9b53fdda640d37de7ce.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>令人惊奇，编译器只看到了crate模块，也就是我们的main.rs文件。这是因为我们需要显式地在Rust中构建模块树——在文件系统树和模块树之间不存在隐式的转换。</p><pre data-type="codeBlock" text="我们需要显式地在Rust中构建模块树——在文件系统树和模块树之间不存在隐式的转换。
"><code></code></pre><p>想要把一个文件添加到模块树中，我们需要使用mod关键字来将这个文件声明为一个子模块(submodule)。另一件使人们感到困惑的事情是你会认为在相同的文件里把一个文件声明为模块(译者注:比如使用mod关键字把config.rs声明为子模块，你可能认为需要在config.rs里来写声明)。但是我们需要在一个不同文件里进行声明！因为我们在这个模块树里只有main.rs这个文件，所以要在main.rs里将config.rs声明为一个子模块。</p><pre data-type="codeBlock" text="mod 关键字声明一个子模块
"><code><span class="hljs-built_in">mod</span> 关键字声明一个子模块
</code></pre><p>mod关键字语法如下:</p><pre data-type="codeBlock" text="mod my_module;
"><code>mod my_module<span class="hljs-comment">;</span>
</code></pre><p>这里，编译器在相同的目录下查找my_module.rs或者my_module/mod.rs。</p><pre data-type="codeBlock" text="my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  └── my_module.rs
"><code>my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  └── my_module.rs
</code></pre><p>或者</p><pre data-type="codeBlock" text="my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  └─┬ my_module
    └── mod.rs
"><code>my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  └─┬ my_module
    └── mod.rs
</code></pre><p>因为main.rs和config.rs在相同的目录下，让我们按照下面的代码声明config模块</p><pre data-type="codeBlock" text="// main.rs
+ mod config;
fn main() {
+ config::print_config();
  println!(&quot;main&quot;);
}
// config.rs
fn print_config() {
  println!(&quot;config&quot;);
}
"><code><span class="hljs-comment">// main.rs</span>
+ mod config;
<span class="hljs-function">fn <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
+ config::<span class="hljs-built_in">print_config</span>();
  println!(<span class="hljs-string">"main"</span>);
}
<span class="hljs-comment">// config.rs</span>
<span class="hljs-function">fn <span class="hljs-title">print_config</span><span class="hljs-params">()</span> </span>{
  println!(<span class="hljs-string">"config"</span>);
}
</code></pre><p>这里，我们通过::语法使用print_config函数。 下面是模块树的样子：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/131f53c273f6e15d4db089d3ff9860abda7c04524359b980222a48625441058d.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>我们已经成功地声明了config模块！但是这还不能调用config.rs里的print_config函数。几乎Rust里面的一切默认都是私有(private)的，我们需要使用pub关键字来让这个函数成为公开(public)的:</p><pre data-type="codeBlock" text="pub关键字使事物公开
"><code><span class="hljs-keyword">pub</span>关键字使事物公开
</code></pre><pre data-type="codeBlock" text="// main.rs
mod config;
fn main() {
  config::print_config();
  println!(&quot;main&quot;);
}
// config.rs
- fn print_config() {
+ pub fn print_config() {
  println!(&quot;config&quot;);
}
"><code><span class="hljs-comment">// main.rs</span>
mod config;
<span class="hljs-function">fn <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
  config::<span class="hljs-built_in">print_config</span>();
  println!(<span class="hljs-string">"main"</span>);
}
<span class="hljs-comment">// config.rs</span>
- <span class="hljs-function">fn <span class="hljs-title">print_config</span><span class="hljs-params">()</span> </span>{
+ <span class="hljs-function">pub fn <span class="hljs-title">print_config</span><span class="hljs-params">()</span> </span>{
  println!(<span class="hljs-string">"config"</span>);
}
</code></pre><p>现在，这样可以正常工作了。我们已经成功的调用了定义在另一个文件里的函数!</p><p>示例2</p><p>让我们尝试在main.rs中调用定义在routes/health_route.rs里的print_health_route函数。</p><pre data-type="codeBlock" text="// main.rs
mod config;
fn main() {
  config::print_config();
  println!(&quot;main&quot;);
}
// routes/health_route.rs
fn print_health_route() {
  println!(&quot;health_route&quot;);
}
"><code><span class="hljs-comment">// main.rs</span>
mod config;
<span class="hljs-function">fn <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
  config::<span class="hljs-built_in">print_config</span>();
  println!(<span class="hljs-string">"main"</span>);
}
<span class="hljs-comment">// routes/health_route.rs</span>
<span class="hljs-function">fn <span class="hljs-title">print_health_route</span><span class="hljs-params">()</span> </span>{
  println!(<span class="hljs-string">"health_route"</span>);
}
</code></pre><p>正如我们之前所讨论的，我们只能对相同目录下的my_module.rs或者my_module/mod.rs使用mod关键字。 所以为了能够在main.rs中调用routes/health_route.rs里定义的函数，我们需要做下面的事情：</p><ul><li><p>创建一个名为routes/mod.rs的文件并且在main.rs中声明routes子模块</p></li><li><p>在routes/mod.rs中声明health_route子模块并且使其成为公开(public)的</p></li><li><p>使health_route.rs里的函数公开(public)</p></li></ul><pre data-type="codeBlock" text="my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  ├── config.rs
  ├─┬ routes
+ │ ├── mod.rs
  │ ├── health_route.rs
  │ └── user_route.rs
  └─┬ models
    └── user_model.rs
// main.rs
mod config;
+ mod routes;


fn main() {
+ routes::health_route::print_health_route();
  config::print_config();
  println!(&quot;main&quot;);
}
// routes/mod.rs
+ pub mod health_route;
// routes/health_route.rs
- fn print_health_route() {
+ pub fn print_health_route() {
  println!(&quot;health_route&quot;);
}
"><code>my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  ├── config.rs
  ├─┬ routes
<span class="hljs-operator">+</span> │ ├── mod.rs
  │ ├── health_route.rs
  │ └── user_route.rs
  └─┬ models
    └── user_model.rs
<span class="hljs-comment">// main.rs</span>
mod config;
<span class="hljs-operator">+</span> mod routes;


fn main() {
<span class="hljs-operator">+</span> routes::health_route::print_health_route();
  config::print_config();
  println<span class="hljs-operator">!</span>(<span class="hljs-string">"main"</span>);
}
<span class="hljs-comment">// routes/mod.rs</span>
<span class="hljs-operator">+</span> pub mod health_route;
<span class="hljs-comment">// routes/health_route.rs</span>
<span class="hljs-operator">-</span> fn print_health_route() {
<span class="hljs-operator">+</span> pub fn print_health_route() {
  println<span class="hljs-operator">!</span>(<span class="hljs-string">"health_route"</span>);
}
</code></pre><p>下面是模块树的样子:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6b8c2ed6732e2112095d7c1ee0fe512503f78ba739f8003340d3964158152bde.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>现在我们可以调用某个目录下文件里定义的函数了。</p><p>示例 3</p><p>让我们尝试这样的调用main.rs =&gt; routes/user_route.rs =&gt; models/user_model.rs</p><pre data-type="codeBlock" text="// main.rs
mod config;
mod routes;
fn main() {
  routes::health_route::print_health_route();
  config::print_config();
  println!(&quot;main&quot;);
}
// routes/user_route.rs
fn print_user_route() {
  println!(&quot;user_route&quot;);
}
// models/user_model.rs
fn print_user_model() {
  println!(&quot;user_model&quot;);
}
"><code><span class="hljs-comment">// main.rs</span>
mod config;
mod routes;
<span class="hljs-function">fn <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
  routes::health_route::<span class="hljs-built_in">print_health_route</span>();
  config::<span class="hljs-built_in">print_config</span>();
  println!(<span class="hljs-string">"main"</span>);
}
<span class="hljs-comment">// routes/user_route.rs</span>
<span class="hljs-function">fn <span class="hljs-title">print_user_route</span><span class="hljs-params">()</span> </span>{
  println!(<span class="hljs-string">"user_route"</span>);
}
<span class="hljs-comment">// models/user_model.rs</span>
<span class="hljs-function">fn <span class="hljs-title">print_user_model</span><span class="hljs-params">()</span> </span>{
  println!(<span class="hljs-string">"user_model"</span>);
}
</code></pre><p>我们想要在main.rs里调用print_user_route函数，而print_user_route函数调用了print_user_model函数</p><p>让我们来进行和之前相同的操作——声明子模块，使函数公开并将子模块添加到mod.rs文件之中。</p><pre data-type="codeBlock" text="my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  ├── config.rs
  ├─┬ routes
  │ ├── mod.rs
  │ ├── health_route.rs
  │ └── user_route.rs
  └─┬ models
+   ├── mod.rs
    └── user_model.rs
// main.rs
mod config;
mod routes;
+ mod models;


fn main() {
  routes::health_route::print_health_route();
+ routes::user_route::print_user_route();
  config::print_config();
  println!(&quot;main&quot;);
}
// routes/mod.rs
pub mod health_route;
+ pub mod user_route;
// routes/user_route.rs
- fn print_user_route() {
+ pub fn print_user_route() {
  println!(&quot;user_route&quot;);
}
// models/mod.rs
+ pub mod user_model;
// models/user_model.rs
- fn print_user_model() {
+ pub fn print_user_model() {
  println!(&quot;user_model&quot;);
}
"><code>my_project
├── Cargo.toml
└─┬ src
  ├── main.rs
  ├── config.rs
  ├─┬ routes
  │ ├── mod.rs
  │ ├── health_route.rs
  │ └── user_route.rs
  └─┬ models
<span class="hljs-operator">+</span>   ├── mod.rs
    └── user_model.rs
<span class="hljs-comment">// main.rs</span>
mod config;
mod routes;
<span class="hljs-operator">+</span> mod models;


fn main() {
  routes::health_route::print_health_route();
<span class="hljs-operator">+</span> routes::user_route::print_user_route();
  config::print_config();
  println<span class="hljs-operator">!</span>(<span class="hljs-string">"main"</span>);
}
<span class="hljs-comment">// routes/mod.rs</span>
pub mod health_route;
<span class="hljs-operator">+</span> pub mod user_route;
<span class="hljs-comment">// routes/user_route.rs</span>
<span class="hljs-operator">-</span> fn print_user_route() {
<span class="hljs-operator">+</span> pub fn print_user_route() {
  println<span class="hljs-operator">!</span>(<span class="hljs-string">"user_route"</span>);
}
<span class="hljs-comment">// models/mod.rs</span>
<span class="hljs-operator">+</span> pub mod user_model;
<span class="hljs-comment">// models/user_model.rs</span>
<span class="hljs-operator">-</span> fn print_user_model() {
<span class="hljs-operator">+</span> pub fn print_user_model() {
  println<span class="hljs-operator">!</span>(<span class="hljs-string">"user_model"</span>);
}
</code></pre><p>下面是模块树的样子:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b390dff57e38a76e80157c8e37bf955142ea7ef48997176599c7f19ae083b00c.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>等等，我们还没有真正地在print_user_route里调用print_user_model!目前为止，我们仅仅在main.rs里调用定义在其他模块里的函数，在别的文件里调用其他模块的函数应该怎么做么？</p><p>如果我们看一下我们的模块树，print_user_model位于crate::models::user_model。所以为了能在非main.rs的其他文件里使用一个模块，我们应该按照模块树中到达指定模块所需要的路径来进行考虑。</p><pre data-type="codeBlock" text="// routes/user_route.rs
pub fn print_user_route() {
+ crate::models::user_model::print_user_model();
  println!(&quot;user_route&quot;);
}
"><code><span class="hljs-comment">// routes/user_route.rs</span>
<span class="hljs-keyword">pub</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">print_user_route</span>() {
+ crate::models::user_model::<span class="hljs-title function_ invoke__">print_user_model</span>();
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"user_route"</span>);
}
</code></pre><p>现在我们已经成功地在一个非main.rs的文件里调用了定义在另一个文件里的函数。</p><p>super</p><p>如果我们的文件组织包含多级目录，完整的限定名就会变得很长。出于某些原因，我们想要从print_user_route中调用print_health_route。它们分别位于crate::routes::health_route和crate::routes::user_route。</p><p>我们可以使用完整路径的限定名crate::routes::health_route::print_health_route();， 但是我们也可以使用一个相对路径super::health_route::print_health_route();</p><pre data-type="codeBlock" text="模块路径中的super关键字指向父级作用域
"><code>模块路径中的<span class="hljs-built_in">super</span>关键字指向父级作用域
</code></pre><pre data-type="codeBlock" text="pub fn print_user_route() {
  crate::routes::health_route::print_health_route();
  // can also be called using
  super::health_route::print_health_route();
  println!(&quot;user_route&quot;);
}
"><code><span class="hljs-keyword">pub</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">print_user_route</span>() {
  crate::routes::health_route::<span class="hljs-title function_ invoke__">print_health_route</span>();
  <span class="hljs-comment">// can also be called using</span>
  super::health_route::<span class="hljs-title function_ invoke__">print_health_route</span>();
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"user_route"</span>);
}
</code></pre><p>use</p><p>在上面的例子中，无论是使用完整的限定名还是相对路径的限定名都很冗长。为了让限定名变得更短，我们可以使用use关键字来给路径绑定一个新名字或者别名。</p><pre data-type="codeBlock" text="use关键字用于使模块路径更短
"><code><span class="hljs-keyword">use</span>关键字用于使模块路径更短
</code></pre><pre data-type="codeBlock" text="pub fn print_user_route() {
  crate::models::user_model::print_user_model();
  println!(&quot;user_route&quot;);
}
"><code><span class="hljs-keyword">pub</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">print_user_route</span>() {
  crate::models::user_model::<span class="hljs-title function_ invoke__">print_user_model</span>();
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"user_route"</span>);
}
</code></pre><p>上面的代码可以重写为:</p><pre data-type="codeBlock" text="use crate::models::user_model::print_user_model;
pub fn print_user_route() {
  print_user_model();
  println!(&quot;user_route&quot;);
}
"><code><span class="hljs-keyword">use</span> crate::models::user_model::print_user_model;
<span class="hljs-keyword">pub</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">print_user_route</span>() {
  <span class="hljs-title function_ invoke__">print_user_model</span>();
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"user_route"</span>);
}
</code></pre><p>除了使用print_user_model这个名字，我们还可以给它起个别名:</p><pre data-type="codeBlock" text="use crate::models::user_model::print_user_model as log_user_model;
pub fn print_user_route() {
  log_user_model();
  println!(&quot;user_route&quot;);
}
"><code><span class="hljs-keyword">use</span> crate::models::user_model::print_user_model <span class="hljs-keyword">as</span> log_user_model;
<span class="hljs-keyword">pub</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">print_user_route</span>() {
  <span class="hljs-title function_ invoke__">log_user_model</span>();
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"user_route"</span>);
}
</code></pre><p>外部模块(External modules)</p><p>添加到Cargo.toml里的依赖对于项目内的所有模块都是可以访问的。我们不需要显式地导入或声明任何东西来使用依赖项。</p><pre data-type="codeBlock" text="外部依赖对于项目内的所有模块都是可以访问的
"><code></code></pre><p>例如，比如说我们在项目中添加了rand这个crate。我们可以像下面这样在代码里直接使用：</p><pre data-type="codeBlock" text="pub fn print_health_route() {
  let random_number: u8 = rand::random();
  println!(&quot;{}&quot;, random_number);
  println!(&quot;health_route&quot;);
}
"><code><span class="hljs-keyword">pub</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">print_health_route</span>() {
  <span class="hljs-keyword">let</span> <span class="hljs-variable">random_number</span>: <span class="hljs-type">u8</span> = rand::<span class="hljs-title function_ invoke__">random</span>();
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"{}"</span>, random_number);
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"health_route"</span>);
}
</code></pre><p>我们也可以使用use来简化路径:</p><pre data-type="codeBlock" text="use rand::random;
pub fn print_health_route() {
  let random_number: u8 = random();
  println!(&quot;{}&quot;, random_number);
  println!(&quot;health_route&quot;);
}
"><code><span class="hljs-keyword">use</span> rand::random;
<span class="hljs-keyword">pub</span> <span class="hljs-keyword">fn</span> <span class="hljs-title function_">print_health_route</span>() {
  <span class="hljs-keyword">let</span> <span class="hljs-variable">random_number</span>: <span class="hljs-type">u8</span> = <span class="hljs-title function_ invoke__">random</span>();
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"{}"</span>, random_number);
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"health_route"</span>);
}
</code></pre><p>总结</p><ul><li><p>模块系统是显式的(译者注:需要明确的声明)——不存在和文件系统的1:1映射</p></li><li><p>我们在一个文件的父级目录把它声明为模块，而不是在文件自身</p></li><li><p>mod关键字用于声明子模块</p></li><li><p>我们需要显式地将函数、结构体等声明为公开的，这样它们才可以被其他模块访问</p></li><li><p>pub关键字把事物声明为公开的</p></li><li><p>use关键字用于简化(缩短)模块路径</p></li><li><p>我们不需要显式声明第三方的模块</p></li></ul>]]></content:encoded>
            <author>asfman@newsletter.paragraph.com (asfman.eth)</author>
        </item>
        <item>
            <title><![CDATA[vim 寄存器]]></title>
            <link>https://paragraph.com/@asfman/vim</link>
            <guid>NrabGwnGmEZk65BurIXv</guid>
            <pubDate>Tue, 01 Nov 2022 02:52:13 GMT</pubDate>
            <description><![CDATA[寄存器是Vim用来存储文件的临时空间，当使用命令y（yank）或d（delete）复制删除文本时，该文本就会被保存在寄存器中，通过p（put）命令插入刚删除或复制的内容。vim的寄存器分为不同的种类：数字寄存器：在normal模式下输入:reg，您是否看到很多”（双引号）开头的数字了呢，这些都是寄存器，（如果暂时没看到，那么在对文本做几个操作，比如：dd,yy等），这些寄存器里保存了最近删除的和复制的文本。 数字寄存器有十个，分别是："0，"1，"2... "9（注意：数字前有个双引号），寄存器"0 保存上一次复制(y)操作的文本，"1到"9寄存器保存最近9次删除的文本行（注意这个“行”字），"1保存的内容是最最近一次删除的内容（也就是说最后一次执行删除命令保存的内容）"2保存的是倒数第二次删除的内容，依此类推，直到"9，如果又有新的操作，那么"9的内容将会被"8的内容替换，先前”9的内容将被丢弃。 那么p（put）命令粘贴是哪个寄存器中的内容呢？有时候是粘贴的是"1寄存器的，有时粘贴的是"0寄存器中的，但是总的原则就是粘贴最近一次删除或者复制的内容，如果删除是最近的一次，就是粘...]]></description>
            <content:encoded><![CDATA[<p>寄存器是Vim用来存储文件的临时空间，当使用命令y（yank）或d（delete）复制删除文本时，该文本就会被保存在寄存器中，通过p（put）命令插入刚删除或复制的内容。vim的寄存器分为不同的种类：</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">数字寄存器：</h3><p>在normal模式下输入:reg，您是否看到很多”（双引号）开头的数字了呢，这些都是寄存器，（如果暂时没看到，那么在对文本做几个操作，比如：dd,yy等），这些寄存器里保存了最近删除的和复制的文本。</p><p>数字寄存器有十个，分别是：&quot;0，&quot;1，&quot;2... &quot;9（注意：<strong>数字前有个双引号</strong>），寄存器&quot;0 保存上一次复制(y)操作的文本，&quot;1到&quot;9寄存器保存最近9次删除的文本行（<strong>注意这个“行”字</strong>），&quot;1保存的内容是<strong>最最近一次</strong>删除的内容（也就是说最后一次执行删除命令保存的内容）&quot;2保存的是<strong>倒数第二次删除</strong>的内容，依此类推，直到&quot;9，如果又有新的操作，那么&quot;9的内容将会被&quot;8的内容替换，先前”9的内容将被丢弃。 </p><p>那么p（put）命令粘贴是哪个寄存器中的内容呢？有时候是粘贴的是&quot;1寄存器的，有时粘贴的是&quot;0寄存器中的，但是总的原则就是<strong>粘贴最近一次删除或者复制的内容</strong>，如果删除是最近的一次，就是粘贴&quot;1的，也就是粘贴刚刚删除的文本，如果复制是最近的一次操作，那么粘贴的内容是&quot;0中的，也就是粘贴刚刚复制的内容。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">字母寄存器：</h3><p>&quot;a，&quot;b，&quot;c...都是字母寄存器，也许你执行:reg的时候看不到这些命令，不要紧，稍后就有了。之前粘贴我们用的都是p命令，如果我想粘贴其他寄存器里面的内容呢，你想到了吗？答案就是：<strong>寄存器的名称+p</strong>。现在我们新建一个字母寄存器，把当前三行保存到&quot;a 寄存器中去，具体操作如下：在normal模式下输入&quot;a3yy，这样当前三行就保存在&quot;a 中去了，粘贴同样在normal模式下，&quot;ap 即可。如果是大写字母的寄存器，如执行：&quot;Cdd 他的作用是把当前行删除，再把内容追加到&quot;c寄存器中，也就是说<strong>字母寄存器没有大写之分，只是功能上有区别，大写就是追加，小写是替换</strong>。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">其他寄存器：</h3><p>&quot;&quot;：无名寄存器，p命令粘贴的内容，保存最近一次删除或复制的内容。</p><p>“-：（<strong>-是个减号</strong>）小删除寄存器（small delete register），前面说过要您注意这个”行“字，也就是说并不是所有删除的文本都会保存在数字寄存器中，如果你删除的只是一个单词或字母： dw或者x，那么这个单词并不会保存在&quot;1寄存器中，而是保存在&quot;-寄存器里面。所有不包含<strong>换行符</strong>的删除都会保存在此寄存器中。</p>]]></content:encoded>
            <author>asfman@newsletter.paragraph.com (asfman.eth)</author>
        </item>
    </channel>
</rss>