私は scala を初めて使用するので、Lift 担当者が Record API をどのように実装したかについて理解できません。ただし、問題はこの API についてではなく、Scala 全般についてです。Lift で使用されるクラス パターン内のオブジェクトがどのように機能するかに興味があります。
class MainDoc private() extends MongoRecord[MainDoc] with ObjectIdPk[MainDoc] {
def meta = MainDoc
object name extends StringField(this, 12)
object cnt extends IntField(this)
}
object MainDoc extends MainDoc with MongoMetaRecord[MainDoc]
上のスニペットでは、Lift でレコードがどのように定義されているかを確認できます。興味深いのは、フィールドがオブジェクトとして定義されていることです。API を使用すると、次のようにインスタンスを作成できます。
val md1 = MainDoc.createRecord
.name("md1")
.cnt(5)
.save
これはおそらくapplyメソッドを使用して行われますか?しかし同時に、次のようなことを行うことで値を取得できます。
val name = md1.name
これはどのように機能しますか?クラスのスコープ内にある場合、オブジェクトはそれほど静的ではありません。それとも、内部表現の単なるコンストラクタークラスですか? すべてのフィールドを反復処理するにはどうすればよいですか? リフレクションを使用しますか?
ありがとう、オットー