【问题标题】:Save variable in a new instance将变量保存在新实例中
【发布时间】:2018-04-10 09:43:47
【问题描述】:

基本上,我希望在更新变量后拥有该变量的旧实例

这里有一些例子可以更好地解释:

variable = { a: "#fff" }
saved = variable
variable[:a] = "#000"

saved[:a]

目标是获得"#fff"。相反,最后一行返回预期的"#000"。我尝试冻结一个对象:

variable = { a: "#fff" }
saved = variable
saved.freeze
variable[:a] = "#000"

但这只会引发FrozenError: can't modify frozen Hash 错误

【问题讨论】:

    标签: ruby-on-rails ruby object instance freeze


    【解决方案1】:

    只是重复变量

    saved = variable.dup
    

    【讨论】:

    • 这有点用,但如果是 RoR 模型,它会从变量中删除 id。我也想保持联系
    • 在rails中你可以使用clone看看stackoverflow.com/a/24650062/2645167
    • 谢谢,确实有帮助! ;)
    • @Sheff3rd 你没有提到 ActiveRecord,也许你应该澄清你的问题。
    • “只是复制变量”——这不会复制变量,它会复制对象。当 OP 提出问题的原因首先是 OP 不完全理解变量和对象之间的区别时,使用这种不精确的术语是没有帮助的。
    【解决方案2】:

    只需复制它:

    variable = { a: "#fff" }
    saved = variable.dup # attention here
    variable[:a] = "#000"
    
    saved[:a]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多