gpt4 book ai didi

具有相同对象 ID 的 Ruby 变量

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:06 26 4
gpt4 key购买 nike

我对那段代码有疑问。

temp_state = @state

我想做的是将我的实例变量@state 的值分配给一个新的局部变量temp_state。问题是当我这样做的时候

temp_state.object_id = 70063255838500
state.object_id = 70063255838500

当我修改 temp_state 时,我也在修改 @state。如何在不修改@state 内容的情况下使用 temp_state?

以下是类(class)的重要部分:

class SearchNode
attr_accessor :state, :g, :f, :free_index

def initialize(state, parent = self)
@state = state
@g = parent == self ? 1 : parent.g
@h = calculate_h
@f = @g + @h
@valid_action = ["Move(Black)", "Move(Red)", "Jump(Black)", "Jump(Red)"]
@free_index = index_of_free
@parent = parent
end

def move_black_jump
free = @free_index
# PROBLEM NEXT LINE
temp_state = @state
if temp_state[free + 2] == 'B' || temp_state[free - 2] == 'B'
if free - 2 >= 0 && free + 2 <= temp_state.length
index = free - 2 if temp_state[free - 2] == 'B'
index = free + 2 if temp_state[free + 2] == 'B'
else
puts "ERROR: Movement out of bounds."
end
x = temp_state[index]
temp_state[index] = 'F'
temp_state[free] = x
else
puts "ERROR: Wrong movement move_black_jump."
end
return temp_state
end

end

感谢您的帮助。

最佳答案

您必须复制该对象,而不是将对同一对象的引用传递给新变量。您使用 Object#dup 进行(浅)复制方法:

temp_state = @state.dup

关于具有相同对象 ID 的 Ruby 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282150/

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