在我看来,以下行为就像 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/