1

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'))
})
4

1 に答える 1

2

p1質問からリストに変えること。L1

L1 <- as.list(p1)

そしてそれをプロトオブジェクトに戻すためにp1a、その親はPerson

p1a <- as.proto(L1, parent = Person)

次に、これらの基本を中心に必要な構造を構築できます。

于 2012-08-23T05:20:26.347 に答える