96064


以下のRustのコードにて、s1は一般的に何と呼ばれますか？  
Javaなどでは"参照"と呼ばれると思います。

[code]

    fn main() {
       let s1 = String::from("hello, world");
       println!("msg: {}", s1);
    }
    
[/code]


CC BY-SA 4.0
2023-08-28T06:14:11.310
96057
2023-08-29T01:02:23.620
38053
question
rust
Rustにおけるオブジェクトのインスタンスを指すナントカの呼び名は？


Rustの公式ガイド（英語版）で使われている用語に基づいて回答しますね。

> 以下のRustのコードにて、s1は一般的に何と呼ばれますか？

このあたりの文章ですと、  
<https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html#storing-
values-with-variables>

`String::from("hello, world")`は

  * `String`の値、`String`値 （a String value）
  * `String`のインスタンス （an instance of String）

`s1`は

  * 変数 （a variable）
  * `String`のインスタンスに束縛された変数 （a variable bound to an instance of String）
  * （変数という言葉を省略して）`String`の値

のように呼ばれています。

私個人の感覚ですと、Rustでインスタンスと呼ぶことは少なくて、値と呼ぶことが圧倒的に多い印象です。

> Javaなどでは"参照"と呼ばれると思います。

Javaではオブジェクトには暗黙的な参照（ポインター）を通してアクセスし、プリミティブ型の値は直接持ちます。ですから、質問のコードでは「参照」と呼んで問題ありません。しかし、Rustには「暗黙的」な参照はなく、デフォルトは値持ちになります。もし、参照が必要なときは以下のように明示的に作ります。

[code]

    let s1 = String::from("hello, world");
    let r1 = &s1;  // 不変参照を作る
    
    let mut s2 = String::from("hello, world");
    let r2 = &mut s2;  // 可変参照を作る
    
[/code]

上の例ですと、`&s1`は

  * `s1`の不変参照 （an immutable reference to `s1`）
  * `String`の値を指す不変参照 （an immutable reference to a `String` value）

`&mut s2`は

  * `s2`の可変参照 （a mutable reference to `s2`）
  * `String`の値を指す可変参照 （a mutable reference to a `String` value）

`r1`と`r2`は厳密には「〜〜の不変参照／可変参照に束縛された変数」と呼ぶのが正しいでしょうが、いちいち変数と言わずに、単に「〜〜の不変参照／可変参照」と呼んでもいいと思います。


CC BY-SA 4.0
2023-08-28T13:09:08.317
96064
2023-08-29T01:02:23.620
2023-08-29T01:02:23.620
14101
14101
96057
answer