【问题标题】:What would you call a non-persistent data structure that allows persistent operations?您将什么称为允许持久操作的非持久数据结构?
【发布时间】:2009-08-16 23:43:37
【问题描述】:

我有一个本质上是可变的类,但允许一些“类持久化”操作。例如,我可以像这样(在 Python 中)改变对象:

# create an object with y equal to 3 and z equal to "foobar"
x = MyDataStructure(y = 3, z = "foobar") 
x.y = 4

但是,除了以这种方式做事之外,还有一些方法可以制作副本然后对其进行变异:

x = MyDataStructure(y=3, z="foobar")
# a is just like x, but with y equal to 4.
a = x.using(y = 4)

这是复制具有不同值的 x。显然,这不符合wikipedia 给出的部分持久性的定义。

那么你会怎么称呼这样的课程呢?准持久对象?持久对象? SortOfPersistentObject?更好的是,这有什么技术名称吗?

【问题讨论】:

  • 您是否混合了术语持久性(在重新启动后仍然存在)和可变性(允许修改值)?这些是非常不同的,并且似乎在问题中可以互换使用。
  • 是的,看起来你所说的持久化实际上是不可变的。 en.wikipedia.org/wiki/Immutable_object
  • @haffax:持久数据结构本质上是不可变的,但不可变数据结构和持久数据结构并不完全相同。请参阅我的问题中的维基百科链接。

标签: python data-structures functional-programming persistence naming


【解决方案1】:

我称这种数据为 Persistable 但不确定它是否是一个词 .

【讨论】:

  • 这也是我想到的第一个词,但我也觉得有点下定决心。 :-)
  • Persistable 是一个完全可以形容的词,不管我的浏览器字典告诉我什么。它不仅是 cromulent,而且非常高效。我的字典只是需要扩展...
【解决方案2】:

这只是一个优化的副本,我宁愿重命名操作以反映这一点。

a = x.copy_with(y=4)

【讨论】:

  • 我喜欢 datetime 标准库模块中的类型表达这个概念的方式——它们将方法命名为 replace(当然,它们是不可变类型,所以应该清楚它们返回一个调整副本而不是改变原始副本;-)。
  • 这是另一种方法。我本来打算为此拥有一个流畅的界面。它读起来像英语:“x using y equal to 4”。
猜你喜欢
  • 2017-09-03
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
相关资源
最近更新 更多