为什么要在冻结的对象上使用Object#clone?

阿杰迪32

好的,出于好奇,您是否有任何理由要Object#clone在冻结的对象上使用?据我了解,使用Object#dup的唯一原因Object#clone是获取现有对象的第二个副本,以便您可以在不更改原始对象的情况下对其进行修改。但是Object#clone复制对象的冻结状态,并且您不能修改冻结的对象,那么您是否有任何理由要在该上下文中使用它?

与此相关的是,如果没有用例,是否有任何原因?

f = "Some string"
f.frozen? #=> false
f.freeze
f.frozen? #=> true
f2 = f.clone
f2.frozen? #=> true
f2.equal? f #=> false
# Why bother? You can't change f or f2 anyway, so
# why even copy it at all?
尼尔·斯莱特

有时(实际上是很多时候),您可能.clone不知道或不想知道其中的对象种类或它们是否被冻结的结构。

在这种情况下,冻结对象的行为类似于非冻结对象,这很有用,这样.clone可以满足人们对工作原理的普遍期望为了澄清起见,其中.clone包括保留冻结状态(虽然dup不会在副本中保留冻结状态)。保留冻结状态可确保副本的行为相同-无法修改对象是重要的属性和行为。

换句话说,如果冻结的对象不这样做,则它们可能会破坏或引起用于.clone处理通用结构的Ruby代码的复杂性这样的一个例子可能是DSL,这些DSL建立了.clone使用时会得到d的模板结构,例如Sinatra,Rails,Grape等生成的Rack响应处理程序。

请注意,我并不是说这些库专门深层克隆路由的详细信息,我没有检查。只是他们具有可创建相当任意结构的副本的DSL。它们是受益于冻结对象的一般,一致行为的系统类型.clone

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在冻结的对象上使用Object#clone?

来自分类Dev

为什么要在object.freeze上使用immutablejs?

来自分类Dev

为什么要在小对象上同步?

来自分类Dev

为什么要在小对象上同步?

来自分类Dev

为什么要在子类上使用类别?

来自分类常见问题

为什么要在memset上使用bzero?

来自分类Dev

为什么要在字典上使用HashSet?

来自分类Dev

为什么要在IntentService上使用服务?

来自分类Dev

为什么要在pbuilder上使用sbuild?

来自分类Dev

为什么要在pbuilder上使用sbuild?

来自分类Dev

为什么要在Dict上使用HashDict?

来自分类Dev

为什么要在全局函数/对象上使用“ ::”运算符?

来自分类Dev

为什么要在字符串或其他对象上使用等待方法?

来自分类Dev

为什么要在Play Framework中的Scala对象上使用@Singleton?

来自分类Dev

什么是gvfs,为什么要在我的系统上使用它?

来自分类Dev

为什么要在void上使用int函数?

来自分类Dev

为什么要在ZF2上使用服务?

来自分类Dev

为什么要在FreeBSD内核上使用Debian 6?

来自分类Dev

sudoedit:为什么要在sudo vi上使用它?

来自分类Dev

为什么要在void上使用int函数?

来自分类Dev

为什么我需要在资源上使用.close()

来自分类Dev

为什么要在ThreadLocal上使用数据插槽?

来自分类Dev

为什么要在 [Align] 对齐上使用 [Expanded] / [Flexible] flex?

来自分类Dev

为什么在SchemaRDDs的Spark中为什么要在.unionAll上使用.union?

来自分类Dev

什么时候以及为什么我们需要在bash上使用“ wait”命令?

来自分类Dev

如果使用new运算符创建对象,为什么要在String中使用intern方法?

来自分类Dev

为什么在iOS上使用Xamarin Forms进行实时摄像机捕获控制会冻结?

来自分类Dev

为什么Object.clone()是Java原生的?

来自分类Dev

当使用react-table时,为什么要在`ReactTable`上使用`useTable`

Related 相关文章

  1. 1

    为什么要在冻结的对象上使用Object#clone?

  2. 2

    为什么要在object.freeze上使用immutablejs?

  3. 3

    为什么要在小对象上同步?

  4. 4

    为什么要在小对象上同步?

  5. 5

    为什么要在子类上使用类别?

  6. 6

    为什么要在memset上使用bzero?

  7. 7

    为什么要在字典上使用HashSet?

  8. 8

    为什么要在IntentService上使用服务?

  9. 9

    为什么要在pbuilder上使用sbuild?

  10. 10

    为什么要在pbuilder上使用sbuild?

  11. 11

    为什么要在Dict上使用HashDict?

  12. 12

    为什么要在全局函数/对象上使用“ ::”运算符?

  13. 13

    为什么要在字符串或其他对象上使用等待方法?

  14. 14

    为什么要在Play Framework中的Scala对象上使用@Singleton?

  15. 15

    什么是gvfs,为什么要在我的系统上使用它?

  16. 16

    为什么要在void上使用int函数?

  17. 17

    为什么要在ZF2上使用服务?

  18. 18

    为什么要在FreeBSD内核上使用Debian 6?

  19. 19

    sudoedit:为什么要在sudo vi上使用它?

  20. 20

    为什么要在void上使用int函数?

  21. 21

    为什么我需要在资源上使用.close()

  22. 22

    为什么要在ThreadLocal上使用数据插槽?

  23. 23

    为什么要在 [Align] 对齐上使用 [Expanded] / [Flexible] flex?

  24. 24

    为什么在SchemaRDDs的Spark中为什么要在.unionAll上使用.union?

  25. 25

    什么时候以及为什么我们需要在bash上使用“ wait”命令?

  26. 26

    如果使用new运算符创建对象,为什么要在String中使用intern方法?

  27. 27

    为什么在iOS上使用Xamarin Forms进行实时摄像机捕获控制会冻结?

  28. 28

    为什么Object.clone()是Java原生的?

  29. 29

    当使用react-table时,为什么要在`ReactTable`上使用`useTable`

热门标签

归档