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式の評価
評価には法則があります。式がどんなに複雑でも、必ず分解されます。
オブジェクト メッセージ
- 左から右へ
- 括弧内の式
- 単項メッセージ
- 二項メッセージ
- キーワードメッセージ
また、メッセージは常に戻り値としてオブジェクトを生成します。このオブジェクトは式において、次のメッセージに対するパラメータあるいはレシーバとして使用されます。
なるほど。。。というか参考書にのってますね。。。
自由自在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脳にはほど遠い。。。