質問するログイン新規登録

回答編集履歴

2

誤字を修正しました。(ライフテイム → ライフタイム)

2021/04/03 12:10

投稿

tatsuya6502
tatsuya6502

スコア2055

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
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

わかりやすさのために、語句を少し追加しました。

2021/04/03 12:10

投稿

tatsuya6502
tatsuya6502

スコア2055

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`はスライスとしてしかアクセスできないので、ほとんどの場合、その型を`&str`(UTF-8バイト列への不変スライス)または`&mut str`(UTF-8バイト列への可変スライス)のように表します。参照とスライスについては、以下の日本語ドキュメントで詳しく解説されています。
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`なライフタイムを持ち、戻り値型と型が合のでコンパイルできます。