(08-17-2011, 10:30 AM)nasuB Wrote: またまた、謎が生まれちゃいました。
RecordSetにデータを追加などするときは、RecordDataクラスのオブジェクトなのに、取得するときはBasicRecordなのはなんでですか??
ややこしいので、同じにすればいいと思うんですが。。。
はじめて書き込みます。
nmyzkと申します。
簡単に言うと、RecordDataがあるのは
「プログラムを簡単に書くため」です。
もしRecordDataが無かったら、
nasuBさんの書いたプログラムは
↓このような書き方をしなければなりません。
Code:
def rs = {RecordSet
{RecordFields
{RecordField "id"},
{RecordField "name"}
}
}
let r:Record = {rs.new-record}
set r["id"] = "01"
set r["name"] = "hoge"
{rs.append r}
set r = {rs.new-record}
set r["id"] = "02"
set r["name"] = "foo"
{rs.append r}
{rs.commit}
{for r in rs do {dump {type-of r}}
かなり冗長な感じがしませんか?
ちなみにこのサンプルはフィールドが2つですし、
取り扱うRecordSetのオブジェクトも1つなので
まだいいですが、
これが何十フィールド、何オブジェクトもを
同時に扱うとなると、いきなりややこしくなります。
でも、RecordDataなら1行でまとめることもできるのです。
あと、RecordDataが内部でRecord(BasicRecord)に変換されるのは、
RecordDataの柔軟性を持ったまま、RecordSetが実現する
高速処理を行うのが難しいからだと思われます。
この先は挙動に基づく推測も含まれますので
次の返信で掲載します。
お暇な方はお読みください。