PostgreSQL Client for Squeakの動きがよくわからないの続き。

umejavaさんのコメントで、やっと動きが理解できました。
ありがとうございます!!
というか、自分が理解できてなさすぎなんですよね。。。orz

result rows at:1 dataKeyedByFieldName. => (result rows at:1) dataKeyedByFieldName.
ですね。単項式のほうが評価順が上なので、修正前だと1 dataKeyedByFieldNameが先に実行されてしまうことになります。

http://smalltalk.cincom.jp/scripts/smalltalk.dll/tutorials/vw7.4/tutorial1/vwsyntax1.sspから引用。

Smalltalk式の評価

評価には法則があります。式がどんなに複雑でも、必ず分解されます。

オブジェクト メッセージ

  1. 左から右へ
  2. 括弧内の式
  3. 単項メッセージ
  4. 二項メッセージ
  5. キーワードメッセージ

また、メッセージは常に戻り値としてオブジェクトを生成します。このオブジェクトは式において、次のメッセージに対するパラメータあるいはレシーバとして使用されます。

なるほど。。。というか参考書にのってますね。。。

自由自在Squeakプログラミング

自由自在SqueakプログラミングのP71〜P74

なるほど。。。自分の勉強不足ですね。。。

いろいろ理解できてきたところで、まとめ。

data := OrderedCollection new.

1 to: result rows size do:[:index | data add: (result rows at: index) dataKeyedByFieldName].

おぉ!!dataにDictionaryたちが入っている♪♪♪

とりあえず、これでデータの持ち回りができるかな?
smalltakerな方々はこんな風なデータをあつかわないんでしょうか?何かもっとこうだろ的なものがあれば、ご教授くださいm(_ _)m

ちなみに、

data := 1 to: result rows size do:[:index | (result rows at: index) dataKeyedByFieldName].

風にデータを入れて悩んでいたりしました。。。(/ \)

あとは、イテレータでやろうとおもったりしてますが、

result rows do:[:index | dataKeyedByFieldName]. "OrderedCollectionになっている"

とやってみたり試行錯誤してますが、なんだかわからない。。。do:の段階で, OrderedCollectionだから、at: indexとかするとエラーになるし。。。
まだまだsmalltalk脳にはほど遠い。。。