回答編集履歴

2

追記1

2020/01/19 05:51

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -57,3 +57,11 @@
57
57
  それぞれのコンストラクタ (Foo::initialize) 内でfooメソッドを呼び出しているため、
58
58
 
59
59
  質問のような結果になるのではないでしょうか。
60
+
61
+
62
+
63
+ [追記1]
64
+
65
+
66
+
67
+ ただし、質問にあるコードは オブジェクトを「一時的に生成」しているだけなので意味はないですが。

1

修正1

2020/01/19 05:50

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -6,74 +6,54 @@
6
6
 
7
7
 
8
8
 
9
- おそらく、C++でいう、コピーコンストラクタが働いているものと推測します。
9
+ ~~おそらく、C++でいう、コピーコンストラクタが働いているものと推測します。~~
10
10
 
11
11
 
12
12
 
13
- [参考1](https://www.javadrive.jp/ruby/class/index2.html)ると
13
+ 多分、コンストラクタである Foo::initializeに渡されていて、その中でfooが呼び出されていためかな
14
14
 
15
15
 
16
16
 
17
- ```Ruby
18
-
19
- # あくまで疑似コード
20
-
21
- オブジェクト名 = クラ名.new(引数)
17
+ まず、最後のセンテンを見ると、
22
-
23
- ```
24
18
 
25
19
 
26
20
 
27
- しいす。
21
+ new(...)がきりに使われて
28
22
 
29
23
 
30
24
 
31
- そして、質問コード
25
+ (...) は引数なので、中からチェックしたほうがいいです。
32
26
 
33
27
 
34
28
 
35
- ```Ruby
36
-
37
- Foo.new(Foo.new(Bar.new))
29
+ (左から見て)最初のFooFoo_1, 次のをFoo_2としたとき、
38
-
39
- ```
40
30
 
41
31
 
42
32
 
43
- とありますね。
33
+ Foo_1.new(Foo_2.new(Bar.new()))
44
34
 
45
35
 
46
36
 
47
- new(...) の部分は引数ので引数を見てみますか
37
+ ますから、
48
38
 
49
39
 
50
40
 
51
- Foo.new(...) で 別の Foo.new(...) が渡されています。
41
+ 一番中にあるBar.new() から評価します。
52
-
53
- おそらく、
54
42
 
55
43
 
56
44
 
57
- (左側から考えて)最初に出てくるFooを Foo_1, 次を Foo_2 と考えてみたとき、
45
+ Bar.newでBarオブジェクトが生成されます。
58
46
 
59
47
 
60
48
 
61
- このFoo_2のインスタンス ( new生成しているため ) がFoo_1 に渡されます。
49
+ そして、このオブジェクトを Foo_2.newに渡して生成します。
62
50
 
63
51
 
64
52
 
65
- よって、「Foo_2のインスタンスをFoo_1にコピーている」ような状態だと思われます。
53
+ さらにそのFoo_2のオブジェクトをFoo_1.newします。
66
54
 
67
55
 
68
56
 
69
- して、Foo_2 も newしていますが、Bar.new() していますね。
57
+ れぞれのコンストラクタ (Foo::initialize) 内でfooメソッドを呼び出しているため、
70
58
 
71
-
72
-
73
- つまり、Bar.newで生成したオブジェクトを (Fooの)コンストラクタである Foo.initializeに渡す。
74
-
75
- そしてそのインスタンスを 別のFooに渡す...
76
-
77
-
78
-
79
- みたいのなんじゃないかなぁと
59
+ 質問のよう結果になるではないでしょうか。