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

回答編集履歴

2

追記

2017/03/08 02:49

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -1,16 +1,21 @@
1
+ ```
2
+ 僕はrubyが苦手でして…生理的に受け付けない言語といいますか。
3
+ なので具体的なコードは書けませんが、デザインパターンからアドバイスだけします。
4
+ ```
5
+
1
6
  構造はComposite(コンポジット)パターンと言います。
2
7
  簡単にいうと、コンポジットパターンとはディレクトリとファイルの構造のことです。
3
8
 
4
- ruby コンポジットパターンで調べてみてください
9
+ コンポジットパターンに適用きる各要素にアクセスするために使えるパターンが2つあります
5
10
 
6
- ちなみ、再帰的な呼び出し行うため利用できるのがvisitor(ビジター)パターンです。
11
+ 各要素アクセスする手段要素自身任せるのがvisitor(ビジター)パターンです。
7
- 考え方としては、要素にファンクタを渡します。
12
+ 考え方としては、ルート要素にファンクタを渡します。
8
13
  要素は自身にファンクタを適用し、自身の子供にファンクタをパスします。
9
14
  子供は子供自身にファンクタを適用し、子供がいればその子供にファンクタをパスします。
10
-
11
15
  この再帰構造を使えば全要素の値がファンクタに入る=参照できる、という寸法です。
16
+ そのためのメソッドを要素に共通で1つだけ持ちます。
12
17
  Visitorパターンはちょっと分かりづらいですけどね…(良い説明サイトがないといつも感じる。)
13
18
 
14
19
  Iteratorパターンにするという方法もあります。
15
20
  Iteratorパターンは、自身の要素を並べるパターンのことです。
16
- 応用して、自分自身と、自分自身の子供を返すということを繰り返してネストされた構造を1層構造に見せることができれば全要素にアクセスできます。
21
+ 応用して、自分自身と、自分自身の子供を返すということを繰り返してネストされた構造を1層構造に見せることができれば全要素にアクセスできるようになります。

1

説明の訂正

2017/03/08 02:48

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  要素は自身にファンクタを適用し、自身の子供にファンクタをパスします。
9
9
  子供は子供自身にファンクタを適用し、子供がいればその子供にファンクタをパスします。
10
10
 
11
- この再帰構造を使えば全要素値が入る、という寸法です。
11
+ この再帰構造を使えば全要素値がファンクタに入る=参照できる、という寸法です。
12
12
  Visitorパターンはちょっと分かりづらいですけどね…(良い説明サイトがないといつも感じる。)
13
13
 
14
14
  Iteratorパターンにするという方法もあります。