-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcollections-impl_1.html
89 lines (89 loc) · 6.3 KB
/
collections-impl_1.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy for Mac OS X (vers 25 March 2009), see www.w3.org" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Scala コレクションのアーキテクチャ -- ビルダ</title>
<link rel="stylesheet" type="text/css" href="guide.css" />
</head>
<body dir="ltr">
<table width="100%" cellpadding="0" cellspacing="2">
<tr>
<td bgcolor="#99CCFF"><a href="collections-impl_2.html"><img border="0" alt="共通する演算の摘出" src="next.png" /></a></td>
<td bgcolor="#99CCFF"><a href="collections-impl_0.html"><img border="0" alt="トップ" src="up.png" /></a></td>
<td bgcolor="#99CCFF"><img alt="" src="blank.png" /></td>
<td align="center" bgcolor="#99CCFF" width="100%"><b>ビルダ</b></td>
<td bgcolor="#99CCFF" align="center" class="tocref"><a href="collections-impl_8.html">目次</a></td>
</tr>
</table>
<h1>ビルダ</h1>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt> <font color="#0000E5">package</font> scala.collection.generic</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt> </tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt> <font color="#0000E5">class</font> <font color="#660099">Builder[-Elem, +To]</font> {</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt> <font color="#0000E5">def</font> +=(elem: <font color="#660099">Elem</font>): <font color="#0000E5">this</font>.type</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt> <font color="#0000E5">def</font> result(): <font color="#660099">To</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt> <font color="#0000E5">def</font> clear()</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt> <font color="#0000E5">def</font> mapResult(f: <font color="#660099">To</font> => <font color="#660099">NewTo</font>): <font color="#660099">Builder[Elem, NewTo]</font> = ...</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt> }</tt></td>
</tr>
</table>
</div>
<div align="center"><tt>Builder</tt> クラスの概要</div>
<p>ほぼ全てのコレクション演算は<em>探索</em> (traversal) か<em>ビルダ</em> (builder) に基づいて実装されている。探索は <tt>Traversable</tt> の <tt>foreach</tt> メソッドが担当し、新しいコレクションの構築は <tt>Builder</tt> クラスのインスタンスが担当する。<a href="collections-impl_1.html">前述のコード</a>は、このクラスを多少簡略化したものを示す。</p>
<p><tt>b</tt> <tt>+=</tt> <tt>x</tt> を用いて、要素 <tt>x</tt> をビルダ <tt>b</tt> に追加できる。 <tt>b</tt> <tt>+=</tt> <tt>(x,</tt> <tt>y)</tt> やバッファの <tt>b</tt> <tt>++=</tt> <tt>xs</tt> のように、複数の要素を一度に追加する構文も用意されている。(実は、バッファはビルダを強力にしたものだ。)<tt>result()</tt> メソッドはビルダからコレクションを返す。戻り値を返した後のビルダの状態は未定義だが、<tt>clear()</tt> によって新たな空の状態に初期化できる。ビルダは、ビルダが返すコレクションの型 <tt>To</tt> と要素型 <tt>Elem</tt> の両方についてジェネリックである。</p>
<p>ビルダは、他のビルダを用いてコレクションの要素を組み立てたいが、その結果を(例えば別の型にするなど)変換したいと思うことがよくある。このような作業は <tt>Builder</tt> クラスの <tt>mapResult</tt> メソッドを用いれば簡単にできる。ここで、配列バッファの <tt>buf</tt> があると仮定する。配列バッファは自身のビルダであるので、配列バッファの <tt>result()</tt> は同じバッファを返す。このバッファを使って配列を構築するビルダを生成したい場合は、以下のように <tt>mapResult</tt> を用いる:</p>
<div class="quote">
<table cellspacing="1" cellpadding="0">
<tr>
<td colspan="99" align="left"><tt>scala> <font color="#0000E5">val</font> buf = <font color="#0000E5">new</font> <font color="#660099">ArrayBuffer[Int]</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color="#590000">buf: scala.collection.mutable.</font></tt><tt><font color="#590000">ArrayBuffer[Int] = ArrayBuffer()</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt> </tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt>scala> <font color="#0000E5">val</font> bldr = buf mapResult (_.toArray)</tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color="#590000">bldr: scala.collection.mutable.</font></tt><tt><font color="#590000">Builder[Int,Array[Int]]</font></tt></td>
</tr>
<tr>
<td colspan="99" align="left"><tt><font color="#590000"> = ArrayBuffer()</font></tt></td>
</tr>
</table>
</div>
戻り値 <tt>bldr</tt> は配列バッファ <tt>buf</tt> を用いて要素を収集するビルダだ。<tt>bldr</tt> に戻り値を要請すると、<tt>buf</tt> の戻り値が計算され、配列バッファ <tt>buf</tt> 自身を返す。この配列バッファは <tt>_.toArray</tt> によって配列に転換される。結果的に <tt>bldr</tt> は、配列のビルダとなる。
<p>続いては、<a href="collections-impl_2.html">共通する演算の摘出</a></p>
<hr />
<table width="100%" cellpadding="0" cellspacing="2">
<tr>
<td bgcolor="#99CCFF"><a href="collections-impl_2.html"><img border="0" alt="共通する演算の摘出" src="next.png" /></a></td>
<td bgcolor="#99CCFF"><a href="collections-impl_0.html"><img border="0" alt="トップ" src="up.png" /></a></td>
<td bgcolor="#99CCFF"><img alt="" src="blank.png" /></td>
<td align="center" bgcolor="#99CCFF" width="100%"><b>ビルダ</b></td>
<td bgcolor="#99CCFF" align="center" class="tocref"><a href="collections-impl_8.html">目次</a></td>
</tr>
</table>
</body>
</html>