저는 scala에 익숙하지 않아서 Lift 녀석들이 어떻게 Record API를 구현했는지에 대해 머리 숙여 질 수 없습니다. 그러나이 API에 대한 질문은 적지 만 스칼라에 대한 자세한 내용은 일반적으로 다릅니다. 클래스 패턴의 오브젝트가 Lift에서 사용되는 방식에 관심이 있습니다.Lift Framework에서 사용되는 클래스 패턴의 객체는 어떻게 작동합니까?
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]
상단 스 니펫에서 리프트에 레코드가 정의되는 방식을 볼 수 있습니다. 흥미로운 부분은 필드가 객체로 정의된다는 것입니다. API를 사용하면 다음과 같은 인스턴스를 만들 수 있습니다.
val md1 = MainDoc.createRecord
.name("md1")
.cnt(5)
.save
이것은 아마도 적용 방법을 사용하여 수행 할 수 있습니까? 그러나 동시에 다음과 같은 방법으로 값을 얻을 수 있습니다.
val name = md1.name
이 모든 기능은 어떻게 작동합니까? 클래스의 범위 내에있을 때 객체가 정적이지 않은가? 아니면 내부 표현을위한 생성자 클래스입니까? 모든 필드를 반복하는 것이 어떻게 가능합니까? Reflection을 사용합니까?
덕분에, 오토