<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>松本 侑真 — #仕様確認</title><description>「仕様確認」タグの記事フィード</description><link>https://yuuma.dev/</link><item><title>所有権まわりの話</title><link>https://yuuma.dev/blog/rust/own/</link><guid isPermaLink="true">https://yuuma.dev/blog/rust/own/</guid><description>所有権周りの話をします</description><pubDate>Mon, 17 Nov 2025 00:29:30 GMT</pubDate><content:encoded>&lt;h2 id=&quot;文字列に関する型&quot;&gt;&lt;a href=&quot;#文字列に関する型&quot; class=&quot;heading-link&quot;&gt;文字列に関する型&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;h3 id=&quot;char&quot;&gt;&lt;a href=&quot;#char&quot; class=&quot;heading-link&quot;&gt;&lt;code&gt;char&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;意味：1文字（Unicodeスカラー値）&lt;/li&gt;
&lt;li&gt;サイズ：常に4バイト（UTF-32的な表現）&lt;/li&gt;
&lt;li&gt;性質：プリミティブ型であり&lt;code&gt;Copy&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;用途：1文字だけを使いたいとき&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt;// main.rs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; c&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; char&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt; &apos;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;あ&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; c&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-36&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;str&quot;&gt;&lt;a href=&quot;#str&quot; class=&quot;heading-link&quot;&gt;&lt;code&gt;str&lt;/code&gt;&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;意味：UTF-8 バイト列としてエンコードされた文字列全体&lt;/li&gt;
&lt;li&gt;サイズ：コンパイル時にはわからない可変長&lt;/li&gt;
&lt;li&gt;性質：自身は&lt;code&gt;Sized&lt;/code&gt;ではないので、必ず参照型（&lt;code&gt;&amp;#x26;str&lt;/code&gt;）として扱う&lt;/li&gt;
&lt;li&gt;用途：複数の文字をまとめて扱いたいとき&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;こんにちは&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; in&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;:x?&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; b&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;to_string&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;as_bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-37&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;変数の代入&quot;&gt;&lt;a href=&quot;#変数の代入&quot; class=&quot;heading-link&quot;&gt;変数の代入&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;文字列を例にして変数の代入時に生じていることを理解する。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s1&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;hello&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s2&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s1&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-38&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;変数&lt;code&gt;s1&lt;/code&gt;は、文字列リテラル&lt;code&gt;hello&lt;/code&gt;から作られる&lt;code&gt;String&lt;/code&gt;型の変数である。
:::note
文字列リテラルは読み取り専用・固定長であり、その型は&lt;code&gt;&amp;#x26;&apos;static str&lt;/code&gt;と表される。
:::&lt;/p&gt;
&lt;p&gt;&lt;code&gt;s1&lt;/code&gt;を&lt;code&gt;s2&lt;/code&gt;に代入すると、&lt;code&gt;String&lt;/code&gt;型のデータがコピーされる。&lt;/p&gt;
&lt;h2 id=&quot;所有権と関数&quot;&gt;&lt;a href=&quot;#所有権と関数&quot; class=&quot;heading-link&quot;&gt;所有権と関数&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;:::tip[引数としての変数]
関数の引数に変数を渡すと、変数の代入のようにムーブやコピーされる。
したがって、関数の引数として元となったものは使えなくなる。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Copy Trait&lt;/code&gt;なオブジェクトであればムーブをしないため、元の変数はそのまま利用できる。
:::&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;hello&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt;  // sがスコープに入る&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    takes_ownership&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt; // コンパイルエラー&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt; // i32&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    makes_copy&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt; // i32はCopy Traitなのでmoveされない&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; takes_ownership&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;some_string&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; some_string&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; makes_copy&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;some_integer&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; i32&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; some_integer&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-39&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;参照&quot;&gt;&lt;a href=&quot;#参照&quot; class=&quot;heading-link&quot;&gt;参照&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;</content:encoded></item><item><title>参照</title><link>https://yuuma.dev/blog/rust/reference/</link><guid isPermaLink="true">https://yuuma.dev/blog/rust/reference/</guid><description>参照の話</description><pubDate>Mon, 17 Nov 2025 00:29:30 GMT</pubDate><content:encoded>&lt;h2 id=&quot;参照を理解する&quot;&gt;&lt;a href=&quot;#参照を理解する&quot; class=&quot;heading-link&quot;&gt;参照を理解する&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;参照とは、ある値へのポインタを保持することである。
そのポインタを利用して、値を書き換えたり読み取ったりできる。&lt;/p&gt;
&lt;p&gt;Rustでは参照周りのルールが複雑だが、それは危ない操作を防ぐために必要なものである。&lt;/p&gt;
&lt;h2 id=&quot;参照のルールのお気持ち&quot;&gt;&lt;a href=&quot;#参照のルールのお気持ち&quot; class=&quot;heading-link&quot;&gt;参照のルールのお気持ち&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;h3 id=&quot;データ競合可能性の排除&quot;&gt;&lt;a href=&quot;#データ競合可能性の排除&quot; class=&quot;heading-link&quot;&gt;データ競合可能性の排除&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;データ競合が発生しうるコードのコンパイルを防ぐため、参照にはいくつかの制約がある。&lt;/p&gt;
&lt;p&gt;具体的には以下の3つの条件を同時に満たす場合にデータ競合が発生しうる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2つ以上のポインタが同じデータに同時にアクセスする。&lt;/li&gt;
&lt;li&gt;少なくとも1つのポインタがデータに書き込みを行っている。&lt;/li&gt;
&lt;li&gt;データへのアクセスを動悸する機構が使用されていない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;ダウンリングポインタの排除&quot;&gt;&lt;a href=&quot;#ダウンリングポインタの排除&quot; class=&quot;heading-link&quot;&gt;ダウンリングポインタの排除&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;ダウンリングポインタとは、他人に渡されてしまった可能性のあるメモリを指すポインタのことである。
その箇所へのポインタを保持している間に、メモリを開放してしまうことで発生する。&lt;/p&gt;
&lt;p&gt;Rustでは、ダウンリングポインタが発生しないように設計されているため、ポインタが指す値が必ず存在することが保証される。&lt;/p&gt;
&lt;h2 id=&quot;参照のルール&quot;&gt;&lt;a href=&quot;#参照のルール&quot; class=&quot;heading-link&quot;&gt;参照のルール&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;実装でお気持ちを実際に確認してみる&lt;/p&gt;
&lt;h3 id=&quot;複数の可変参照の禁止&quot;&gt;&lt;a href=&quot;#複数の可変参照の禁止&quot; class=&quot;heading-link&quot;&gt;複数の可変参照の禁止&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;同じスコープで同時に2つの可変参照を持つことはできない。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;hello&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r1&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r2&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt; // E0499&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r1&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r2&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-45&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;:::note[お気持ち]
&lt;code&gt;r1&lt;/code&gt;と&lt;code&gt;r2&lt;/code&gt;が同じデータを指しているため、どちらかがデータを書き換えた場合にもう一方の参照が不正になる可能性がある。
:::&lt;/p&gt;
&lt;h3 id=&quot;可変参照と普遍参照が同時に存在することの禁止&quot;&gt;&lt;a href=&quot;#可変参照と普遍参照が同時に存在することの禁止&quot; class=&quot;heading-link&quot;&gt;可変参照と普遍参照が同時に存在することの禁止&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;同じスコープで可変参照と普遍参照を同時に持つことはできない。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;hello&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r1&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r2&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt; // 不変参照は同時に存在してOK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r3&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt; // E0502&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r1&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r2&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-46&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;:::note[お気持ち]
不変参照をしている&lt;code&gt;r2&lt;/code&gt; (&lt;code&gt;r1&lt;/code&gt;はすでに所有権を失っている) から見ると、&lt;code&gt;s&lt;/code&gt;が書き換わることを想定していない。
裏で&lt;code&gt;s3&lt;/code&gt;がこっそり&lt;code&gt;s&lt;/code&gt;を書き換えられる可能性があり、不変参照の直感に反するので禁止。
:::&lt;/p&gt;
&lt;p&gt;関数を使った例&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;hello world&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; word&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; first_word&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;  s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt; // E0502&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;  println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;The first word is &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; word&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-47&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;first_word()&lt;/code&gt;関数は&lt;code&gt;s&lt;/code&gt;を不変で借用している。
そのあとの&lt;code&gt;s.clear()&lt;/code&gt;では、&lt;code&gt;s&lt;/code&gt;を可変参照しようとしているため、エラーになる。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;clear()&lt;/code&gt;の実装：&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;pub&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; clear&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#F7768E&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#F7768E&quot;&gt;    self&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#A9B1D6&quot;&gt;vec&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-48&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;宙に浮いた参照の排除&quot;&gt;&lt;a href=&quot;#宙に浮いた参照の排除&quot; class=&quot;heading-link&quot;&gt;宙に浮いた参照の排除&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; reference_to_nothing&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; dangle&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt;// E0106&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; dangle&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; -&gt;&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;hello&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;    &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-49&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;E0106のエラーメッセージは、ライフタイムに関するものであり、まだ知らない機能である。&lt;/p&gt;
&lt;p&gt;:::note[お気持ち]
&lt;code&gt;dangle()&lt;/code&gt;の返り値は&lt;code&gt;&amp;#x26;s&lt;/code&gt;であり、&lt;code&gt;s&lt;/code&gt;は&lt;code&gt;dangle()&lt;/code&gt;内部で作られた変数である。
つまり&lt;code&gt;dangle()&lt;/code&gt;が終了した時点で&lt;code&gt;s&lt;/code&gt;はスコープを抜けて解放される。&lt;/p&gt;
&lt;p&gt;返り値&lt;code&gt;&amp;#x26;s&lt;/code&gt;は&lt;code&gt;main()&lt;/code&gt;で扱えることになってしまい、その後も&lt;code&gt;s&lt;/code&gt;を指し続けることになる。
その結果として、&lt;code&gt;main()&lt;/code&gt;関数内で存在しないメモリを指す参照を扱うことになり、危険である。
:::&lt;/p&gt;
&lt;h4 id=&quot;解決法&quot;&gt;&lt;a href=&quot;#解決法&quot; class=&quot;heading-link&quot;&gt;解決法&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;String&lt;/code&gt;を直接返すことで解決する：&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; no_dangle&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; -&gt;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;hello&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;    s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-50&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;所有権がMoveされるので、関数を抜けたあとでも問題なく変数&lt;code&gt;s&lt;/code&gt;（から所有権が移ったもの）を扱える。&lt;/p&gt;</content:encoded></item><item><title>参照周りの話</title><link>https://yuuma.dev/blog/rust/reference-around/</link><guid isPermaLink="true">https://yuuma.dev/blog/rust/reference-around/</guid><description>参照周りの話をします</description><pubDate>Mon, 17 Nov 2025 00:29:30 GMT</pubDate><content:encoded>&lt;h2 id=&quot;可変参照に対してメソッドを呼ぶとき&quot;&gt;&lt;a href=&quot;#可変参照に対してメソッドを呼ぶとき&quot; class=&quot;heading-link&quot;&gt;可変参照に対してメソッドを呼ぶとき&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;String&lt;/code&gt;型の変数に対して、&lt;code&gt;push_str&lt;/code&gt;メソッドを呼ぶことができる。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;Hello&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;    s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;push_str&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;World&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-40&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;可変参照を使うと次のようにも書ける。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;Hello&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; s&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;    r&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;push_str&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;World&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; r&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-41&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;ここで疑問なのが、&lt;code&gt;push_str&lt;/code&gt;メソッドは&lt;code&gt;String&lt;/code&gt;型で実装されているので、参照型に対する挙動がどうなっているのか、ということである。&lt;/p&gt;
&lt;h3 id=&quot;push_strの実装&quot;&gt;&lt;a href=&quot;#push_strの実装&quot; class=&quot;heading-link&quot;&gt;&lt;code&gt;push_str&lt;/code&gt;の実装&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;push_str&lt;/code&gt;の実装は以下のようになっている。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;pub&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; push_str&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#F7768E&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#F7768E&quot;&gt;    self&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#A9B1D6&quot;&gt;vec&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;extend_from_slice&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;as_bytes&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-42&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;つまりおおざっぱに書くとこんな感じになっている。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;impl&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;    fn&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt; push_str&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-light-font-style:inherit;--shiki-dark:#9D7CD8;--shiki-dark-font-style:italic&quot;&gt;mut&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#F7768E&quot;&gt; self&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#C0CAF5&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; ...&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-43&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;push_str&lt;/code&gt;は、&lt;code&gt;&amp;#x26;mut self&lt;/code&gt;を受け取るメソッドとなっている。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;#x26;mut self&lt;/code&gt;の概念はまだ出てきていないのでわからないが、おそらく、「可変参照を通して自分自身を引数に取る」ということを意味している。&lt;/p&gt;
&lt;p&gt;ChatGPTによると、Rustのメソッド呼び出し糖衣構文と言うらしく、&lt;code&gt;mut s: String&lt;/code&gt;の変数に対しては、自動で&lt;code&gt;&amp;#x26;mut s&lt;/code&gt;が渡されるらしい。&lt;/p&gt;
&lt;p&gt;何にせよ、&lt;code&gt;push_str&lt;/code&gt;は&lt;code&gt;String&lt;/code&gt;型で実装されているものであるので、&lt;code&gt;some_string: &amp;#x26;mut String&lt;/code&gt;に対して、&lt;code&gt;some_string.push_str()&lt;/code&gt;と呼び出したときの挙動については別の話になる。&lt;/p&gt;
&lt;h3 id=&quot;参照外し&quot;&gt;&lt;a href=&quot;#参照外し&quot; class=&quot;heading-link&quot;&gt;参照外し&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;参照型についてこのメソッドを呼ぶ際には、参照外し (deref) が自動的に行われる。
Rustでは、「参照に外してメソッドを呼ぶ」とき、自動で参照外しして本体にアクセスする。&lt;/p&gt;
&lt;p&gt;つまり、&lt;code&gt;&amp;#x26;mut String&lt;/code&gt; -&gt; &lt;code&gt;String&lt;/code&gt;へと自動的に参照外し：&lt;code&gt;*&lt;/code&gt;が適用される。
そのため実際には、&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;some_string&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#7AA2F7&quot;&gt;push_str&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECE6A&quot;&gt;World&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#89DDFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-44&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;と同じ意味になり、可変な&lt;code&gt;String&lt;/code&gt;変数が渡されるようになる。&lt;/p&gt;</content:encoded></item><item><title>スライス</title><link>https://yuuma.dev/blog/rust/slice/</link><guid isPermaLink="true">https://yuuma.dev/blog/rust/slice/</guid><description>スライスの話</description><pubDate>Mon, 17 Nov 2025 00:29:30 GMT</pubDate><content:encoded>&lt;h2 id=&quot;スライスを理解する&quot;&gt;&lt;a href=&quot;#スライスを理解する&quot; class=&quot;heading-link&quot;&gt;スライスを理解する&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;details class=&quot;callout callout-info&quot; open&gt;
&lt;summary class=&quot;callout-title callout-title-info&quot;&gt;&lt;svg fill=&quot;none&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; stroke=&quot;currentColor&quot; viewBox=&quot;0 0 24 24&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: visible; color: currentcolor;&quot;&gt;&lt;path fill=&quot;currentColor&quot; fill-rule=&quot;evenodd&quot; d=&quot;M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.34l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z&quot; clip-rule=&quot;evenodd&quot;&gt;&lt;/path&gt;&lt;/svg&gt;基本事項&lt;/summary&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;スライスは常に参照として使わなければいけない。&lt;/p&gt;
&lt;p&gt;すなわちスライスは必ず元データの所有権を持たない。&lt;/p&gt;
&lt;/details&gt;
&lt;p&gt;以下が基本的な使い方である。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; array&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; slice&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#51597D;--shiki-dark-font-style:italic&quot;&gt; // arrayのインデックス1から3までのスライスを取得&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-51&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;次のコードはコンパイルエラーになる。&lt;/p&gt;
&lt;div class=&quot;remark-code-container&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light tokyo-night&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#1a1b26;color:#24292e;--shiki-dark:#a9b1d6; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; array&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#BB9AF7&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; slice&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#C0CAF5&quot;&gt; array&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#89DDFF&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#FF9E64&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#89DDFF&quot;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;button class=&quot;code-copy-button&quot; id=&quot;code-copy-button-52&quot; type=&quot;button&quot; aria-label=&quot;コードをコピー&quot;&gt;&lt;svg fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 512 512&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: &amp;#x27;visible&amp;#x27;, color: &amp;#x27;currentcolor&amp;#x27;&quot;&gt;&lt;rect width=&quot;336&quot; height=&quot;336&quot; x=&quot;128&quot; y=&quot;128&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; rx=&quot;57&quot; ry=&quot;57&quot;&gt;&lt;/rect&gt;&lt;path fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; stroke-width=&quot;32&quot; d=&quot;m383.5 128 .5-24a56.16 56.16 0 0 0-56-56H112a64.19 64.19 0 0 0-64 64v216a56.16 56.16 0 0 0 56 56h24&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;これはスライスを値として扱おうとしていることから、コンパイルエラーが発生する。&lt;/p&gt;
&lt;details class=&quot;callout callout-info&quot; open&gt;
&lt;summary class=&quot;callout-title callout-title-info&quot;&gt;&lt;svg fill=&quot;none&quot; stroke-width=&quot;0&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; stroke=&quot;currentColor&quot; viewBox=&quot;0 0 24 24&quot; height=&quot;1em&quot; width=&quot;1em&quot; style=&quot;overflow: visible; color: currentcolor;&quot;&gt;&lt;path fill=&quot;currentColor&quot; fill-rule=&quot;evenodd&quot; d=&quot;M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 0 1 .67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 1 1-.671-1.34l.041-.022ZM12 9a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z&quot; clip-rule=&quot;evenodd&quot;&gt;&lt;/path&gt;&lt;/svg&gt;Info&lt;/summary&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Rustでは任意長のデータ型
&lt;a href=&quot;https://zenn.dev/philomagi/articles/rust_why_cant_use_str_as_both_argument_and_return&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Rust - strが引数/戻り値で使えない理由について&lt;/a&gt;&lt;/p&gt;
&lt;/details&gt;</content:encoded></item><item><title>Rustの文字列</title><link>https://yuuma.dev/blog/rust/string/</link><guid isPermaLink="true">https://yuuma.dev/blog/rust/string/</guid><description>Rustの文字列についてのメモ</description><pubDate>Mon, 17 Nov 2025 00:29:30 GMT</pubDate><content:encoded>&lt;h2 id=&quot;これを読んでみる&quot;&gt;&lt;a href=&quot;#これを読んでみる&quot; class=&quot;heading-link&quot;&gt;これを読んでみる&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://qiita.com/yagince/items/e7474839246ced595f7a&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&amp;#x26;strとStringを理解しようと思ったらsliceやmutを理解できてないことに気づいた話&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://qiita.com/Kogia_sima/items/88920a2a14448ef4dbe3&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Rustの&amp;#x26;strや&amp;#x26;[T]はどこを参照しているのか&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;わかったこと&quot;&gt;&lt;a href=&quot;#わかったこと&quot; class=&quot;heading-link&quot;&gt;わかったこと&lt;/a&gt;&lt;span class=&quot;anchor&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/span&gt;&lt;/h2&gt;</content:encoded></item></channel></rss>