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

回答編集履歴

1

修正

2020/06/22 06:59

投稿

rhiroe
rhiroe

スコア2352

answer CHANGED
@@ -7,8 +7,10 @@
7
7
 
8
8
  `c.object_id` と `(c * 3).object_id` を比較してもらうとわかると思いますが、この2つは別のオブジェクトですので、`Integer#*`は破壊的変更を行うメソッドではないです。そこの理解は良いとして、順序としては「新規オブジェクト『3』を作成し、戻り値『3』を返している」となります。(厳密には数値のオブジェクトは値によって固定なので新規という表現はあまり適していないかもしれません。)
9
9
 
10
- 変数の内部で何かが起きているという風に考えてらっしゃるのかもしれませんが、変数は箱であってそこにオブジェクトを入れているだけです。もしかしたら数値を「単純な値」としているのに「オブジェクト」の話が出きてしまっているところ問題の原因なのかもしれません。Rubyの場合、数値であってもオブジェクトですので、例えばRubyで`3`と書けば`3`になるんですが、厳密には`Integer(3)`が`3`にあたります。
10
+ 変数の内部で何かが起きているという風に考えてらっしゃるのかもしれませんが、変数は箱であってそこにオブジェクトを入れているだけです。オブジェクトにただ名前をつけているだけ言った方りやすいかもしれません。
11
11
 
12
+ もしかしたら数値を「単純な値」としているのに「オブジェクト」の話が出てきてしまっているところが問題の原因なのかもしれません。Rubyの場合、数値であってもオブジェクトですので、例えばRubyで`3`と書けば`3`になるんですが、厳密には`Integer(3)`が`3`にあたります。
13
+
12
14
  そのメソッドが破壊的な変更をするかどうかは `freeze` を使って確認してみると良いです。
13
15
 
14
16
  ```rb