ruby - 数组分配与追加行为

标签 ruby

在我看来,以下行为就像 assign 方法正在按值处理 visited,而 append 方法将其视为引用:

class MyClass
  def assign(visited)
    visited += ["A"]
  end
  def append(visited)
    visited << "A"
  end
end

instance = MyClass.new
visited = []

instance.assign(visited)
visited # => []

instance.append(visited)
visited # => ["A"]

有人可以解释这种行为吗?

这不是关于 Ruby 是否支持按引用传递或按值传递的问题,而是关于下面提供的示例,以及为什么两个据称执行相同操作的方法表现出不同行为的问题。

最佳答案

您在第一个方法中重新定义了局部变量。

这是一样的

visited = []
local_visited = visited
local_visited = ['A']
visited
# => [] 

在第二种方法中:

visited = []
local_visited = visited
local_visited << 'A'
visited
# => ["A"] 

关于ruby - 数组分配与追加行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43679123/

相关文章:

ruby-on-rails - 运行 "Insecure world writable dir/mnt/c in PATH, mode 040777"后如何修复 "rails s"错误

ruby-on-rails - 如何在 Windows 上安装 RedCloth?

ruby - 返回空白页的最小 Capybara/Poltergeist 测试

ruby-on-rails - 如何在 Ruby 中使用 RSpec 通过 Windows 命令提示符获取颜色?

Ruby:在方法内递增

Ruby 1.8.7 将散列转换为字符串

ruby-on-rails - 无法打开与本地主机 :3101 - Rails/Docker 的 TCP 连接

ruby-on-rails - 如何重置我的 sidekiq 计数器?

ruby - 在 Ruby 中使用 HTTPClient 重定向到非 https 资源错误

ruby - `URI` 和 `URI.parse` 之间的区别