몇 가지 간단한 proto
개체를 영구 저장소 (MongoDB)에 저장하여 다른 프로그래밍 언어의 코드로 해당 개체를 조작 할 수 있기를 바랍니다. 간단히 말해서 다른 프로토 객체를 참조하지 않을 것입니다. 그것들의 속성은 일반적인 R 타입 (목록, 벡터 등)이 될 것입니다. 또한 각 객체는 속성 값을 가진리스트가있는 팩토리 메소드를 가질 수 있습니다. 따라서 MongoDB-to-proto 경로는 간단합니다.R : proto serialization/deserialization을 사용하여 목록으로 작성
proto
의 내부 구조와 R 환경 체인은 모든 proto 객체의 속성을 R 목록으로 가져올 수있는 간단하고 강력한 방법이 있는지 잘 알지 못합니다. 이 작업을 자동으로 수행 할 수 있습니까? 아니면 to_list()
메서드를 구현하는 모든 프로토 객체에 대해 생각해야합니까?
내가 여기에보고 싶은 testthat
를 사용하여 몇 가지 예제 코드와 내가 행동에 대해 개발하고 새로운 MongoDB의 드라이버 API :
test_that("proto persistence", {
Person <- proto(
..Name = 'PersonFactory',
has_tag = function(., tag) {
tag %in% .$tags
},
new = function(., name, tags=c()) {
.$proto(..Name='Person', name=name, tags=tags)
}
)
p1 <- Person$new(name='bob', tags=c('friend', 'coworker'))
coll <- test_db()$collection('test')
coll$store('bob', p1)
result <- coll$find_one(id='bob')
expect_true(is.list(result))
expect_true(is.list(result$proto))
expect_equal(result$proto$name, 'bob')
expect_equal(result$proto$tags, c('friend', 'coworker'))
p2 <- coll$load('bob')
expect_equal(p2$name, 'bob')
expect_equal(p2$tags, c('friend', 'coworker'))
expect_true(p2$has_tag('friend'))
})
@ G.Grothendieck, proto의 관리자 인 경우가 종종 있습니다. 나는 그동안 코드를 게시 할 것을 제안합니다. –
@ G.Grothendieck 제안에 감사드립니다. MongoDB에서 검사되고 수정 될뿐만 아니라 유지 될 수있는 R 목록에 대한 데이터의 논리적 직렬화를 찾고 있습니다. 이 질문의 제목과 설명을 분명하게 변경했습니다. proto 객체뿐만 아니라 모든 부모 등에서 데이터를 가져 오는 좋은 방법이 있습니까? – Sim
@ G.Grothendieck 여기에 만족시키고 싶은 기대치에 관한 코드를 추가했습니다. '$ new' factory 메쏘드를 통해 객체 생성을 연결한다면, 부모가 제대로 연결되어야하는 것처럼 보일 것입니다. 맞습니까? – Sim