回答編集履歴
2
誤字を修正しました。(ライフテイム → ライフタイム)
answer
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
標準ライブラリーの
|
1
|
+
標準ライブラリーの`Result<T, E>`型は`T`と`E`という2つのジェネリックな型引数を持ちます。`Result<usize, &'static str>`なら、`T`の実引数が`usize`型、`E`の実引数が`&'static str`型になります。
|
2
2
|
|
3
3
|
`&'static str`型の`&'static`が何なのかについてですが、まず`&`の部分について説明します。`&`は参照またはスライスで、`&str`なら`str`型の値を指す(不変の)スライスを意味します。`str`は文字列型の一種で、より正確にいうとUTF-8形式のバイト列を表します。`str`にはスライスを通さないとアクセスできないので、ほとんどの場合、その型を`&str`(UTF-8バイト列への不変スライス)または`&mut str`(UTF-8バイト列への可変スライス)のように表します。参照とスライスについては、以下の日本語ドキュメントで詳しく解説されています。
|
4
4
|
|
5
5
|
- [参照と借用](https://doc.rust-jp.rs/book-ja/ch04-02-references-and-borrowing.html)
|
6
6
|
- [スライス型 - 文字列スライス](https://doc.rust-jp.rs/book-ja/ch04-03-slices.html#%E6%96%87%E5%AD%97%E5%88%97%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9)
|
7
7
|
|
8
|
-
次に`'static`について説明します。このように`'`で始まるものはライフ
|
8
|
+
次に`'static`について説明します。このように`'`で始まるものはライフタイム注釈です。これは参照やスライスに求めるライフタイム(生存期間)を指定するためのものです。
|
9
9
|
|
10
10
|
- [ライフタイムで参照を検証する](https://doc.rust-jp.rs/book-ja/ch10-03-lifetime-syntax.html)
|
11
11
|
|
1
わかりやすさのために、語句を少し追加しました。
answer
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
標準ライブラリーの `Result<T, E>` 型は`T`と`E`という2つのジェネリックな型引数を持ちます。`Result<usize, &'static str>`なら、`T`の実引数が`usize`、`E`の実引数が`&'static str`になります。
|
1
|
+
標準ライブラリーの `Result<T, E>` 型は`T`と`E`という2つのジェネリックな型引数を持ちます。`Result<usize, &'static str>`なら、`T`の実引数が`usize`型、`E`の実引数が`&'static str`型になります。
|
2
2
|
|
3
|
-
`&'static str`の`&'static`が何なのかについてですが、まず`&`の部分について説明します。`&`は参照またはスライスで、`&str`なら`str`を指す(不変の)スライスを意味します。`str`は文字列で、より正確にいうとUTF-8形式のバイト列を表します。`str`はスライスと
|
3
|
+
`&'static str`型の`&'static`が何なのかについてですが、まず`&`の部分について説明します。`&`は参照またはスライスで、`&str`なら`str`型の値を指す(不変の)スライスを意味します。`str`は文字列型の一種で、より正確にいうとUTF-8形式のバイト列を表します。`str`にはスライスを通さないとアクセスできないので、ほとんどの場合、その型を`&str`(UTF-8バイト列への不変スライス)または`&mut str`(UTF-8バイト列への可変スライス)のように表します。参照とスライスについては、以下の日本語ドキュメントで詳しく解説されています。
|
4
4
|
|
5
5
|
- [参照と借用](https://doc.rust-jp.rs/book-ja/ch04-02-references-and-borrowing.html)
|
6
6
|
- [スライス型 - 文字列スライス](https://doc.rust-jp.rs/book-ja/ch04-03-slices.html#%E6%96%87%E5%AD%97%E5%88%97%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9)
|
7
7
|
|
8
|
-
次に`'static`のように`'`で始まるものはライフテイム注釈です。これは参照やスライスに求めるライフタイム(生存期間)を指定するためのものです。
|
8
|
+
次に`'static`について説明します。このように`'`で始まるものはライフテイム注釈です。これは参照やスライスに求めるライフタイム(生存期間)を指定するためのものです。
|
9
9
|
|
10
10
|
- [ライフタイムで参照を検証する](https://doc.rust-jp.rs/book-ja/ch10-03-lifetime-syntax.html)
|
11
11
|
|
@@ -35,4 +35,4 @@
|
|
35
35
|
|
36
36
|
引数の中に`&`がついた型がないときに、戻り値型を`&`にしたいときは、`'static`な`&`しか返せません。なぜそうなのかを一言で説明するのは難しいのですが、日本語ドキュメントの「[所有権とは?](https://doc.rust-jp.rs/book-ja/ch04-01-what-is-ownership.html)」のあたりをしっかり読むと、だんだん分かってくると思います。
|
37
37
|
|
38
|
-
ご質問のコードの引数型は`bool`で、これには`&`がついていません。そのため、戻り値型を`&str`にしたいときは`&'static str`にする必要があります。`"error message"`のような文字列リテラルは静的に存在するため`'static`なライフタイムを持ち、う
|
38
|
+
ご質問のコードの引数型は`bool`で、これには`&`がついていません。そのため、戻り値型を`&str`にしたいときは`&'static str`にする必要があります。`"error message"`のような文字列リテラルは静的に存在するため`'static`なライフタイムを持ち、戻り値型と型が合うのでコンパイルできます。
|