PostgreSQL Client for Squeakの動きがよくわからないの解決の巻。
またまた、umejavaさんにコメントを頂き解決しました!!
度々ありがとうございます。m(_ _)m
result rows collect:[:each | each dataKeyedByFieldName]. ですね。do:だと単に回すだけなのですが、collect:だとブロックの評価結果がコピーされたコレクションに入ります。
なるほど。。。
data := OrderedCollection new. 1 to: result rows size do:[:index | data add: (result rows at: index) dataKeyedByFieldName].
↑このコードが、
data := result rows collect:[:each | each dataKeyedByFieldName].
こうなるってすごいなぁーっとちょっと感動したり。。。
(他の言語でも単純にお前のコーディング能力が低いだけだろうということもあったり。。。)
smalltalkはコレクションクラスが充実しているようで、使いこなすにはしっかり覚えないと。。。
うーんとcollect:??って最初なったんですが、自由自在Squeakプログラミングにそういえば、
イテレータ関係は後述と書いてあったような。。。(^ ^;)
ということで、お勉強。
列挙子は6種類。なんとなく、その英訳の意味もつけてみるw
列挙子 | 英訳 | 簡易説明? |
---|---|---|
do: | (する) | コレクションのすべての要素に同じ操作を行う。 |
collect: | (収集) | do: 同様だが、処理を行って結果となるコレクションを返す。(加工用) |
select: | (選択) | コレクションから特定の要素を取り出したい場合に使用する。評価結果がtrueであれば結果となるコレクションを返す。 |
reject: | (拒否) | select: と反対の動き。trueのものを排除した(つまりはfalse)結果となるコレクションを返す。 |
detect: | (検出) | trueになった最初の要素を返す。 |
inject: into: | (注入)(〜の中へ) | 次のものに対する操作の結果を蓄積する。(難しいからあんまり使わない?) |
なるほど。後は、サンプルコードを書きまくる感じかな。
クエリからデータをとってくる場合は、抽出条件を絞って持ってくるからdo: とcollect: が取りあえずって感じかな?
ディクショナリ系のイテレートプロトコルはまた今度。
PostgreSQL client for Squeakの他の使い方もまとめたいけど、もう少しいろいろ学ぶとさらに見えてくると信じて、
次へいこう。