【发布时间】:2015-02-05 15:26:24
【问题描述】:
我正在用 Ruby 写一个mastermind game。到目前为止,我的代码位于here on github。
我遇到的问题是:当我运行下面的函数时,在游戏开始时生成的实例变量@code在第一次运行函数后返回空。
我已经分配了一个局部变量 tempcode,@code 的值,所有的操作都是在函数内对 tempcode 进行的。我还为@code 分配了一个attr_reader,而不是一个attr_accessor。所以@code 不应该改变!
def compare_guess_to_code()
correct_color = "1"
correct_color_and_pos = "2"
incorrect_color = "0"
tempcode = @code
a = 0
@guess.length.times do #maybe a for loop that goes through both arrays simultaneously?
case
when @guess[a] == tempcode[a]
feedback.push(correct_color_and_pos)
tempcode.delete_at[a]
@guess.delete_at[a]
when guess[a] != tempcode[a] && tempcode.include?(guess[a])
feedback.push(correct_color)
tempcode.delete_at[a]
@guess.delete_at[a]
when !(tempcode.include?(guess[a]))
feedback.push(incorrect_color)
tempcode.delete_at[a]
@guess.delete_at[a]
else
puts "Error"
end
end
feedback.sort!
feedback.reverse!
print "Feedback: #{feedback}"
end
反馈正确返回,一切似乎都工作正常,在@code 清空之前,我不能多次执行比较功能。我怎样才能保持价值一致?
如果要运行程序进行测试,请使用 mastermind/lib/mastermind.rb。
【问题讨论】:
-
这是一个引用,你的临时变量是对同一个数组的引用。你需要复制它。