为什么要在冻结的对象上使用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?
尼尔·斯莱特(Neil Slater)

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

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

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

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

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Javascript

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

来自分类Dev

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

来自分类Java

为什么要在堆栈上使用Deque?

来自分类Dev

为什么要在pbuilder上使用sbuild?

来自分类Dev

为什么要在memset上使用bzero?

来自分类Dev

为什么要在Dict上使用HashDict?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Java

为什么要在Java / Spring上使用Scala / Lift?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么要在诸如Postgres的RDBMS上使用Parquet

来自分类Dev

为什么要在结构上使用&符号?

来自分类Python

为什么要在easy_install上使用pip?

来自分类Dev

为什么要在多个 if 语句上使用 elif 和 else?

来自分类Python

为什么要在Google App Engine上使用Django?

来自分类Dev

为什么我要在StatefulWidget上使用StatelessWidget?

来自分类Dev

为什么要在Keras上使用纯TensorFlow?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么要在主线程上订阅?

来自分类Dev

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

来自分类Java

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

来自分类Dev

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

来自分类Dev

为什么要在Sharepoint 2013中使用客户端对象模型

来自分类Dev

使用z-index之后,为什么要在html中显示背景对象

来自分类Dev

为什么要在AngularJS中使用$ onInit?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

    为什么要在堆栈上使用Deque?

  4. 4

    为什么要在pbuilder上使用sbuild?

  5. 5

    为什么要在memset上使用bzero?

  6. 6

    为什么要在Dict上使用HashDict?

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

    为什么要在Java / Spring上使用Scala / Lift?

  12. 12

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

  13. 13

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

  14. 14

    为什么要在诸如Postgres的RDBMS上使用Parquet

  15. 15

    为什么要在结构上使用&符号?

  16. 16

    为什么要在easy_install上使用pip?

  17. 17

    为什么要在多个 if 语句上使用 elif 和 else?

  18. 18

    为什么要在Google App Engine上使用Django?

  19. 19

    为什么我要在StatefulWidget上使用StatelessWidget?

  20. 20

    为什么要在Keras上使用纯TensorFlow?

  21. 21

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

  22. 22

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

  23. 23

    为什么要在主线程上订阅?

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

    为什么要在Sharepoint 2013中使用客户端对象模型

  28. 28

    使用z-index之后,为什么要在html中显示背景对象

  29. 29

    为什么要在AngularJS中使用$ onInit?

热门标签

归档