summaryrefslogtreecommitdiff
path: root/2023/05
diff options
context:
space:
mode:
authormuqiuhan <[email protected]>2025-05-27 06:06:45 +0000
committermuqiuhan <[email protected]>2025-05-27 06:06:45 +0000
commit4da1dc74954fafe4d21841892bafc955a37ac805 (patch)
tree85a1dfa32a37c0cbf63b7d6b3735ab854d707efb /2023/05
parentbb19987062af9a28aa5dea93cc0eba9ac3a7e1ab (diff)
downloadblog-4da1dc74954fafe4d21841892bafc955a37ac805.tar.gz
deploy: 74a1d57ead41454de540829cd6de5ba1f5702bd6
Diffstat (limited to '2023/05')
-rw-r--r--2023/05/02/Rust-Partial-语义/index.html8
-rw-r--r--2023/05/03/Rust-NewType-模式/index.html2
2 files changed, 5 insertions, 5 deletions
diff --git a/2023/05/02/Rust-Partial-语义/index.html b/2023/05/02/Rust-Partial-语义/index.html
index a55ca90c..460e970b 100644
--- a/2023/05/02/Rust-Partial-语义/index.html
+++ b/2023/05/02/Rust-Partial-语义/index.html
@@ -205,10 +205,10 @@
<p>在全部比较可能的场景,我们会使用Ord trait,它要求实现cmp方法,总是返回一个Ordering,表示两个值之间的确切比较关系。Ord是在所有值都能够比较时使用的,例如整数和字符串。</p>
<h2 id="设计用意和解决的问题"><a href="#设计用意和解决的问题" class="headerlink" title="设计用意和解决的问题"></a>设计用意和解决的问题</h2><p>Rust 设计 PartialEq 和 PartialOrd trait 主要出于以下几个理由:</p>
<ul>
-<li><strong>非总序理念</strong>:并不是所有类型都有一个全局的排序方法。例如,复数之间就没有一个自然的大小顺序。为了避免为这些类型人为地赋予一个排序方法,Rust 提供了一个只需部分实现序列操作的选择。</li>
-<li><strong>IEEE 浮点数标准</strong>:由于浮点数标准定义了特殊值(NaN, 正负无穷),以及NaN不等于自身的规则,浮点数在一些情况下不能进行相等性或大小比较。</li>
-<li><strong>提升错误处理能力和安全性</strong>:通过返回 <code>Option&lt;Ordering&gt;</code>,<code>partial_cmp</code> 方法明确指出了失败的可能性,从而迫使程序员在使用时考虑并处理这种情况,增加了代码的正确性和稳健性。</li>
-<li><strong>表达性和灵活性</strong>:这些 trait 允许开发者为自定义类型定义适当的相等性和排序行为,从而加强了 Rust 类型系统的表达性和灵活性。</li>
+<li>非总序理念:并不是所有类型都有一个全局的排序方法。例如,复数之间就没有一个自然的大小顺序。为了避免为这些类型人为地赋予一个排序方法,Rust 提供了一个只需部分实现序列操作的选择。</li>
+<li>IEEE 浮点数标准:由于浮点数标准定义了特殊值(NaN, 正负无穷),以及NaN不等于自身的规则,浮点数在一些情况下不能进行相等性或大小比较。</li>
+<li>提升错误处理能力和安全性:通过返回 <code>Option&lt;Ordering&gt;</code>,<code>partial_cmp</code> 方法明确指出了失败的可能性,从而迫使程序员在使用时考虑并处理这种情况,增加了代码的正确性和稳健性。</li>
+<li>表达性和灵活性:这些 trait 允许开发者为自定义类型定义适当的相等性和排序行为,从而加强了 Rust 类型系统的表达性和灵活性。</li>
</ul>
<p>PartialEq 和 PartialOrd trait 的设计允许程序员选择精准的相等性和排序语义,同时明确了对于某些类型相等性比较和大小排序并不总是可能的事实。通过引入适度的复杂性,让 Rust 的类型系统更加安全。</p>
diff --git a/2023/05/03/Rust-NewType-模式/index.html b/2023/05/03/Rust-NewType-模式/index.html
index cf85a5f6..e0f1ab4b 100644
--- a/2023/05/03/Rust-NewType-模式/index.html
+++ b/2023/05/03/Rust-NewType-模式/index.html
@@ -192,7 +192,7 @@
</div>
</div>
<div class="post-content">
- <p>New Type模式是一种软件设计模式,用于在已有类型的基础上创建一个新的类型。在Rust中,这通常是通过<strong>定义一个结构体,其中只包含一个单一成员。这个结构体(New Type)对外提供了一个新的、独立的类型,用于对原始类型增加额外的语义或限制。</strong></p>
+ <p>New Type模式是一种软件设计模式,用于在已有类型的基础上创建一个新的类型。在Rust中,这通常是通过定义一个结构体,其中只包含一个单一成员。这个结构体(New Type)对外提供了一个新的、独立的类型,用于对原始类型增加额外的语义或限制。</p>
<h2 id="加强类型安全"><a href="#加强类型安全" class="headerlink" title="加强类型安全"></a>加强类型安全</h2><figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">struct</span> <span class="title class_">Meters</span>(<span class="type">f64</span>);</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Feet</span>(<span class="type">f64</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_meters</span> = <span class="title function_ invoke__">Meters</span>(<span class="number">100.0</span>);</span><br><span class="line"><span class="keyword">let</span> <span class="variable">length_in_feet</span> = <span class="title function_ invoke__">Feet</span>(<span class="number">328.084</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 编译器会防止以下代码执行,因为类型不匹配</span></span><br><span class="line"><span class="comment">// let wrong_length = Meters(length_in_feet); // 编译错误</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 正确的构造</span></span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">add_lengths</span>(length1: Meters, length2: Meters) <span class="punctuation">-&gt;</span> Meters &#123;</span><br><span class="line"> <span class="title function_ invoke__">Meters</span>(length1.<span class="number">0</span> + length2.<span class="number">0</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>这个例子使用 newtype 模式避免将原始类型f64用于不同的量度,从而增强了类型的安全性。</p>