新手问题 函数参数 ar 为数组时,在函数内部更新 ar 的问题

u4crella · 2020年04月24日 · 最后由 liuminhan 回复于 2020年04月24日 · 2437 次阅读

先上代码

def manage
  i = 0; ar = [0, 6]
  while (ar != false)
    work(ar, i)
    puts "i=#{i},ar=#{ar}"; gets
    i += 1
  end
end

def work(ar, i)
  if (i<6)
    ar[0] = i
  else
    ar = false
  end
  #~ return
end

manage()
# 无限循环:i>6, ar=[5,6]

在 work() 函数里设置 ar=false 后,为什么 manage() 内的 ar 还是 [5,6]? 是因为 work() 的参数 ar 是个引用或者指针,然后 ar=false 只是把在 work() 函数内的 ar 指向 false,而没有影响到 manage() 内的 ar 的值吗?

不是很懂,求解答。谢谢。

调用 work() 函数的时候,在函数里面的 ar, 跟实际的 ar 一开始是指向的同一块内存, 所以你对它操作 ar[0], 会操作到实际的 ar 上去, 但是当你在函数内部进行了赋值,ar= false, 函数内部的那个 ar 已经不指向真正的 ar 那块内存空间了

def work(new_ar, i)
  if (i<6)
    new_ar[0] = i
  else
    new_ar = false
  end
  #~ return
end

这样应该更清晰

需要 登录 后方可回复, 如果你还没有账号请 注册新账号