学习笔记
<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!(&quot;Hello, world!&quot;);
another_function();
}
fn another_function() {
println!(&quot;Another function.&quot;);
}</code></pre>
<p>所有权:
变量在所有者离开作用域后时自动清除,强调的是所有权。而引用没有所有权,只是借用。借用并不会影响所有权者的释放,如下:</p>
<pre><code class="language-rust">fn dangle() -&gt; &amp;String { // dangle 返回一个字符串的引用
let s = String::from(&quot;hello&quot;); // s 是一个新字符串
&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” 的类型声明写作 &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>