summaryrefslogtreecommitdiff
path: root/2023/05/02/Rust-Partial-语义
diff options
context:
space:
mode:
authormuqiuhan <[email protected]>2025-09-09 06:17:00 +0000
committermuqiuhan <[email protected]>2025-09-09 06:17:00 +0000
commitd5de65fdb1802cdf498d65d93397f290813c377c (patch)
tree92fe61a76d20d1203203665d4b48e7f151f088bd /2023/05/02/Rust-Partial-语义
parent48efa2dfde7c263f84ee5bb0872747034908d607 (diff)
downloadblog-d5de65fdb1802cdf498d65d93397f290813c377c.tar.gz
deploy: 9665097f0fa0dae9f92123fac54d26c0818758a5
Diffstat (limited to '2023/05/02/Rust-Partial-语义')
-rw-r--r--2023/05/02/Rust-Partial-语义/index.html11
1 files changed, 6 insertions, 5 deletions
diff --git a/2023/05/02/Rust-Partial-语义/index.html b/2023/05/02/Rust-Partial-语义/index.html
index b2745990..d56cbb23 100644
--- a/2023/05/02/Rust-Partial-语义/index.html
+++ b/2023/05/02/Rust-Partial-语义/index.html
@@ -195,15 +195,16 @@
<blockquote>
<p>在Rust中,PartialEq和PartialOrd trait处理了不是所有值都可以相互比较的情况。</p>
</blockquote>
-<h2 id="PartialEq-Trait"><a href="#PartialEq-Trait" class="headerlink" title="PartialEq Trait"></a>PartialEq Trait</h2><p>PartialEq trait用于定义值相等性的比较。它的设计允许类型的值之间进行相等(<code>==</code>)和不等(<code>!=</code>)的比较。与其对应的 Eq trait 确保一个类型的所有值都是可以可靠比较的,即满足等价关系的特性,如自反性、对称性和传递性。</p>
+<h2 id="PartialEq-Trait"><a class="header-anchor" href="#PartialEq-Trait">¶</a>PartialEq Trait</h2>
+<p>PartialEq trait用于定义值相等性的比较。它的设计允许类型的值之间进行相等(<code>==</code>)和不等(<code>!=</code>)的比较。与其对应的 Eq trait 确保一个类型的所有值都是可以可靠比较的,即满足等价关系的特性,如自反性、对称性和传递性。</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">eq</span>(&amp;<span class="keyword">self</span>, other: &amp;<span class="keyword">Self</span>) <span class="punctuation">-&gt;</span> <span class="type">bool</span>;</span><br><span class="line"><span class="keyword">fn</span> <span class="title function_">ne</span>(&amp;<span class="keyword">self</span>, other: &amp;<span class="keyword">Self</span>) <span class="punctuation">-&gt;</span> <span class="type">bool</span>;</span><br></pre></td></tr></table></figure>
-
<p>在大多数情况下,类型的值都能够完全比较相等性,这时可以实现Eq。然而,对于一些特殊类型的值,如浮点数,由于存在无穷大的正负值和NaN值,导致它们的比较更加复杂。例如,根据IEEE浮点数的标准,NaN与任何值(包括它自己)比较都不相等。</p>
-<h2 id="PartialOrd-Trait"><a href="#PartialOrd-Trait" class="headerlink" title="PartialOrd Trait"></a>PartialOrd Trait</h2><p>PartialOrd trait用于定义值之间的大小比较。类似于PartialEq,它允许部分比较大小,返回一个Option,表示比较结果可能存在,也可能不存在(即比较无法进行时返回None):</p>
+<h2 id="PartialOrd-Trait"><a class="header-anchor" href="#PartialOrd-Trait">¶</a>PartialOrd Trait</h2>
+<p>PartialOrd trait用于定义值之间的大小比较。类似于PartialEq,它允许部分比较大小,返回一个Option,表示比较结果可能存在,也可能不存在(即比较无法进行时返回None):</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">fn</span> <span class="title function_">partial_cmp</span>(&amp;<span class="keyword">self</span>, other: &amp;<span class="keyword">Self</span>) <span class="punctuation">-&gt;</span> <span class="type">Option</span>&lt;Ordering&gt;;</span><br></pre></td></tr></table></figure>
-
<p>在全部比较可能的场景,我们会使用Ord trait,它要求实现cmp方法,总是返回一个Ordering,表示两个值之间的确切比较关系。Ord是在所有值都能够比较时使用的,例如整数和字符串。</p>
-<h2 id="设计用意和解决的问题"><a href="#设计用意和解决的问题" class="headerlink" title="设计用意和解决的问题"></a>设计用意和解决的问题</h2><p>Rust 设计 PartialEq 和 PartialOrd trait 主要出于以下几个理由:</p>
+<h2 id="设计用意和解决的问题"><a class="header-anchor" href="#设计用意和解决的问题">¶</a>设计用意和解决的问题</h2>
+<p>Rust 设计 PartialEq 和 PartialOrd trait 主要出于以下几个理由:</p>
<ul>
<li>非总序理念:并不是所有类型都有一个全局的排序方法。例如,复数之间就没有一个自然的大小顺序。为了避免为这些类型人为地赋予一个排序方法,Rust 提供了一个只需部分实现序列操作的选择。</li>
<li>IEEE 浮点数标准:由于浮点数标准定义了特殊值(NaN, 正负无穷),以及NaN不等于自身的规则,浮点数在一些情况下不能进行相等性或大小比较。</li>