任何人都可以帮助一个相对较新的红宝石人,看看为什么我得到这个没有方法错误?非常感谢!
def comp_block
only_user_valued = @winning_propositions.map { |each_hash| each_hash.select { |key, value| value == @user_sign } }
count_of_each = only_user_valued.map { |count_the_items_in_hash| count_the_items_in_hash.count }
index_array = count_of_each.each_with_index.select { |num, index| num == 2 }.map { |index_spot| index_spot[1] }
if index_array.empty? == true
random_move
else
@nil_valued_values_array = []
@nil_valued_array_true_false = []
index_array.each do |element|
@nil_valued_values_array += [@winning_propositions[element].select { |key, value| value == nil }]
@nil_valued_array_true_false += [@nil_valued_values_array.empty?]
end
nil_value = @nil_valued_values_array.delete({})
move = nil_value[0].keys[0]
if @nil_valued_array_true_false == [false] || @nil_valued_array_true_false == [true, false] || @nil_valued_array_true_false == [false, true]
@possible_places[move] = @comp_sign
#changes the winning prop values in parallel
list_of_matching_arrays=@winning_propositions.select { |key, value| key.to_s.match(move.to_s) }
list_of_matching_arrays.each do |change_hash_value|
change_hash_value[move] = @comp_sign
end
puts @comp_name + " made the move: #{move}"
display_game_board
puts "Here I am defending/BLOCKED!!!!!!"
else @nil_valued_array_true_false == [true] || @nil_valued_array_true_false == [true, true]
random_move
end
end
end
答案 0 :(得分:0)
嗯,这不是一个修复(因为你有很多代码,不确定外部发生了什么),但是你应该添加一些调试语句。
看这里:
move = nil_value[0].keys[0]
如果nil_value
或keys
为nil
,您将明显收到该错误。我建议你打印它们的值,看看哪一个是空的:
puts "<<<<< NIL_VALUE: #{nil_value}"
puts "<<<<< NIL_VALUE[0]: #{nil_value[0]}"
puts "<<<<< NIL_VALUE[0].KEYS: #{nil_value[0].keys}"
等等。
答案 1 :(得分:0)
嗯,显然nil_value
或nil_value[0].keys
都是nil
。看两行代码:
nil_value = @nil_valued_values_array.delete({})
move = nil_value[0].keys[0]
最明显的原因是@nil_valued_values_array.delete({})
找不到要删除的空哈希,thus returns nil,或者如果确实找到一个,则返回空哈希。