gpt4 book ai didi

ruby-on-rails - 为什么我的副本也会影响原件?

转载 作者:数据小太阳 更新时间:2023-10-29 07:58:18 27 4
gpt4 key购买 nike

我正在尝试通过一些修改将副本添加到数组:

  site.pages.dup.each do | page |
new_page = page.dup
data = new_page.data
data['permalink'] = File.join('/app', page.url)
data['layout'] = 'app'
site.pages << new_page
end

site.pages.each do | page |
puts page.data
end

当我输出 page.data 时,永久链接不同,但 data['layout'] 对于数组中的所有项都是相同的。我还尝试了 data = new_page.data.dup 并在每个实例中写出 new_page.data

最佳答案

(移动评论以回答格式问题。)

请提供数据示例;我在使用类似结构时遇到的问题为零,例如,

pages = [
{
'name' => 'page 1',
'data' => {
'permalink' => 'p1 perma',
'layout' => 'p1 layout'
}
},

{
'name' => 'page 2',
'data' => {
'permalink' => 'p2 perma',
'layout' => 'p2 layout'
}
},
]

如果我(基本上)使用您的代码,加上我的评论:

pages.dup.each do |p|
new_page = p.dup

new_data = new_page['data'].dup

new_data['layout'] = 'app'
new_data['permalink'] = "#{new_data['permalink']} whatever"

new_page['data'] = new_data

pages << new_page
end

我得到以下输出:

[{"name"=>"page 1", "data"=>{"permalink"=>"p1 perma", "layout"=>"p1 layout"}},
{"name"=>"page 2", "data"=>{"permalink"=>"p2 perma", "layout"=>"p2 layout"}},
{"name"=>"page 1", "data"=>{"permalink"=>"p1 perma whatever", "layout"=>"app"}},
{"name"=>"page 2", "data"=>{"permalink"=>"p2 perma whatever", "layout"=>"app"}}]

不相关,但我会分开数组连接;相反,考虑 mapping 页面并使用原始 pages 和修改后的页面创建一个新数组。现在,您正在执行不必要的额外 dup,这会增加一些困惑。

我还将 data dup/modification 分解为一个单独的方法(可能还有整个 dupe 过程)以真正保持紧凑,粗略地说:

def modify_page_data(data)
new_data = data.dup

new_data['permalink'] = "#{data['permalink']} whatever"
new_data['layout'] = 'app'

new_data
end

def dup_page(page)
new_page = page.dup
new_page['data'] = modify_page_data(page['data'])
new_page
end

new_pages = pages.map(&method(:dup_page))

然后您可以concat 或任何您想要的原始页面 和修改后的新页面。

https://github.com/davelnewton/stackoverflow/tree/master/ruby/51289405

关于ruby-on-rails - 为什么我的副本也会影响原件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51289405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com