1
我希望能够将一些简单的proto
对象存储在持久存储区(MongoDB)中,其中的属性可以通过其他编程语言的代码进行操作。简单地说,我的意思是他们不会引用其他原始对象。它们的属性将是常见的R类型:列表,向量等。此外,每个对象都可以有一个工厂方法,该方法根据其属性值给出一个列表来创建它。因此,MongoDB到原型路径似乎很简单。R:原型序列化/反序列化到列表
我不明白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'))
})
@Grothendieck,proto的维护者,经常来自SO。我建议你在此期间发布一些代码。 –
@ G.Grothendieck谢谢你的建议。我正在寻找逻辑序列化的数据到一个R列表,这个列表可以被保存,也可以在MongoDB中检查/修改。我已经改变了问题的标题和说明以清楚地说明问题。是否有一种很好的方法来从原始对象及其所有父母等中获取数据? – Sim
@ G.Grothendieck我在这里添加了关于期望值的代码。如果我通过'$ new'工厂方法连接对象创建,看起来这应该起作用,因为父母应该正确地连接到那里,对吗? – Sim