公开学习文档

公开学习文档


学习笔记

<h2>笔记</h2> <p>能返回值的就是表达式,表达式不能包含分号</p> <p>类型: Rust 的 <code>char</code> 类型的大小为四个字节(four bytes),并代表了一个 Unicode 标量值(Unicode Scalar Value),这意味着它可以比 ASCII 表示更多内容。</p> <p>数组:</p> <pre><code class="language-rust">let a = [1, 2, 3, 4, 5]; let a: [i32; 5] = [1, 2, 3, 4, 5]; let a = [3; 5];</code></pre> <p>命名规则: Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词。</p> <pre><code class="language-rust">fn main() { println!(&amp;quot;Hello, world!&amp;quot;); another_function(); } fn another_function() { println!(&amp;quot;Another function.&amp;quot;); }</code></pre> <p>所有权: 变量在所有者离开作用域后时自动清除,强调的是所有权。而引用没有所有权,只是借用。借用并不会影响所有权者的释放,如下:</p> <pre><code class="language-rust">fn dangle() -&amp;gt; &amp;amp;String { // dangle 返回一个字符串的引用 let s = String::from(&amp;quot;hello&amp;quot;); // s 是一个新字符串 &amp;amp;s // 返回字符串 s 的引用 } // 这里 s 离开作用域并被丢弃。其内存被释放。 // 危险!</code></pre> <p>一个引用的作用域从声明的地方开始一直持续到最后一次使用为止</p> <h2>引用</h2> <p>规则:</p> <ul> <li> <p>在任意给定时间,要么 只能有一个可变引用,要么 只能有多个不可变引用。</p> </li> <li>引用必须总是有效的。</li> </ul> <p>其它:</p> <ul> <li> <p>vec.push 是可变引用?</p> <p>在 vector 的结尾增加新元素时,在没有足够空间将所有元素依次相邻存放的情况下,可能会要求分配新内存并将老的元素拷贝到新的空间中。</p> </li> <li> <p>“字符串 slice” 的类型声明写作 &amp;str,这是不可变引用。</p> </li> <li>如果不用引用,在赋值时就可能面临被 move</li> </ul> <h2>vector</h2> <ul> <li>类似于任何其他的 struct,vector 在其离开作用域时会被释放</li> </ul> <h2>String</h2> <ul> <li> <p>String 被实现为一个带有一些额外保证、限制和功能的字节 vector 的封装</p> </li> <li>由于字符串字面值被储存在程序的二进制输出中,因此字符串字面值也是字符串 slices</li> </ul> <h2>Slice 类型</h2> <ul> <li> <p>slice 是一类引用,所以它没有所有权。</p> </li> <li>字符串 slice(string slice)是 String 中一部分值的引用</li> </ul>

页面列表

ITEM_HTML