将Ruby数组作为参数传递时,`<<;`在“+;=”时追加不是吗?

将Ruby数组作为参数传递时,`<<;`在“+;=”时追加不是吗?,ruby,arrays,Ruby,Arrays,将数组传递给函数时,我遇到了一个意外的结果,的行为是#之间的主要区别是# 我的理解是,在Ruby中,所有函数参数都是通过引用传递的 不,正如您自己发现的,Ruby是按值传递的,而不是按引用传递的。这就是为什么你看到了你看到的结果 我的理解是,在Ruby中,所有函数参数都是通过引用传递的 不,正如您自己发现的,Ruby是按值传递的,而不是按引用传递的。这就是您看到结果的原因。谢谢您的解释。这似乎仍然与那行代码的“意义”相反@MattRiemer一个可行的方法是arr.replace(arr+[va

将数组传递给函数时,我遇到了一个意外的结果,
的行为是
#之间的主要区别是
#
我的理解是,在Ruby中,所有函数参数都是通过引用传递的

不,正如您自己发现的,Ruby是按值传递的,而不是按引用传递的。这就是为什么你看到了你看到的结果

我的理解是,在Ruby中,所有函数参数都是通过引用传递的


不,正如您自己发现的,Ruby是按值传递的,而不是按引用传递的。这就是您看到结果的原因。

谢谢您的解释。这似乎仍然与那行代码的“意义”相反@MattRiemer一个可行的方法是
arr.replace(arr+[value])
,因为您保留了相同的实例
arr+=[value]
与创建全新实例的
arr=arr+[value]
相同。@MattRiemer我添加了更新,表单
arr=arr+[10]
无效also@CarySwoveland是的,他们是化名。很好的解释,莫扎罗@阿鲁普真是太神奇了,因为他预料到了我的一个问题:
object\u id
是否定义为
\u id\u
的别名?另一个方便的
\uuuuxx\uuuuuu
是当前方法的
方法。感谢索契的演出(但价值500亿美元)。在最近的《纽约客》杂志上,谢谢你的解释。这似乎仍然与那行代码的“意义”相反@MattRiemer一个可行的方法是
arr.replace(arr+[value])
,因为您保留了相同的实例
arr+=[value]
与创建全新实例的
arr=arr+[value]
相同。@MattRiemer我添加了更新,表单
arr=arr+[10]
无效also@CarySwoveland是的,他们是化名。很好的解释,莫扎罗@阿鲁普真是太神奇了,因为他预料到了我的一个问题:
object\u id
是否定义为
\u id\u
的别名?另一个方便的
\uuuuxx\uuuuuu
是当前方法的
方法。感谢索契的演出(但价值500亿美元)。在最近的《纽约客》杂志上,先仔细阅读文档。看新的。然后请参阅ary。它更像是“按指针传递”,而不是“按引用传递”。您正在将对象传递给方法,而不是变量本身。请先仔细阅读文档。看新的。然后请参阅ary。它更像是“按指针传递”,而不是“按引用传递”。您将对象传递给方法,而不是变量本身。
def build_results
  result = []

  [1, 2, 3].each { |value| concat_to_array(value, result) }

  result
end

def concat_to_array(value, arr)
  arr << value
end

build_results() # Will return [1,2,3].  As I would expect.
def build_results
  result = []

  [1, 2, 3].each { |value| add_to_array(value, result) }

  result
end

def add_to_array(value, arr)
  arr += [value]
end

build_results() # Will return [], not what I expected!
arr = []
arr.__id__ # => 68916130
arr << 10
arr.__id__ # => 68916130
arr = []
arr.__id__ # => 68916130
arr += [10]
arr.__id__ # => 68725310
def add_to_array(value, arr)
  arr = arr + [value]
end
build_results()
# => []