我希望能够将一些简单proto
的对象存储在持久存储(MongoDB)中,它们的属性可以通过其他编程语言的代码进行操作。简单地说,我的意思是它们不会引用其他原型对象。它们的属性将是常见的 R 类型:列表、向量等。此外,每个对象都可以有一个工厂方法,在给定具有其属性值的列表的情况下创建它。因此,MongoDB 到原型的路径似乎很简单。
我不了解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'))
})