簡體   English   中英

紅寶石塊迭代

[英]ruby block iteration

我對ruby中的迭代感到困惑。在我編寫的以下代碼中,我期望打印出的兩個路徑應該相同。 但實際上不是。 似乎在for循環中更改了路徑。

我的代碼有什么問題嗎? 謝謝

def one_step_search(dest,paths)
  direction = %w(north east south west)
  new_paths = []
  paths.map do |path|

    print "original path is: "
    print_path path

    curr_room = path.last
    for i in 0..3
      new_path = path
      if !curr_room.send("exit_#{direction[i]}").nil?
        next_room_tag = curr_room.send("exit_#{direction[i]}")[0] 
        next_room = find_room_by_tag(next_room_tag)
        if !new_path.include?(next_room)  # don't go back to the room visited before
          new_path << next_room
          new_paths << new_path  
          print "new path is: "
          print_path path
          return new_paths if dest.tag == next_room_tag
        end
      end
    end
  end

  return new_paths
end

在我看來問題出在這一行

new_path = path

您可能會認為new_pathpath是不同的對象,但事實並非如此。 我將舉例說明:

a = "foo"
b = a
puts a.sub!(/f/, '_')
puts a                   # => "_oo"
puts b                   # => "_oo"

ab是指向一個對象的引用。 最簡單的解決方案是使用dupclone

new_path = path.clone

但實際上您的代碼需要良好的清理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM