diff options
| author | muqiuhan <[email protected]> | 2025-05-27 06:06:45 +0000 |
|---|---|---|
| committer | muqiuhan <[email protected]> | 2025-05-27 06:06:45 +0000 |
| commit | 4da1dc74954fafe4d21841892bafc955a37ac805 (patch) | |
| tree | 85a1dfa32a37c0cbf63b7d6b3735ab854d707efb /2023/05/03 | |
| parent | bb19987062af9a28aa5dea93cc0eba9ac3a7e1ab (diff) | |
| download | blog-4da1dc74954fafe4d21841892bafc955a37ac805.tar.gz | |
deploy: 74a1d57ead41454de540829cd6de5ba1f5702bd6
Diffstat (limited to '2023/05/03')
| -rw-r--r-- | 2023/05/03/Rust-NewType-模式/index.html | 2 |
1 files changed, 1 insertions, 1 deletions
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">-></span> Meters {</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">}</span><br></pre></td></tr></table></figure> <p>这个例子使用 newtype 模式避免将原始类型f64用于不同的量度,从而增强了类型的安全性。</p> |
