为什么在类中返回变量变量

Sal*_*uel -1 ruby variables class

我无法理解这种红宝石行为,代码更好地解释了我的意思:

class DoNotUnderstand
    def initialize
        @tiny_array = [3,4]
        test
    end

    def messing(ary)
        return [ary[0]+=700, ary[1]+=999]
    end

    def test
        puts @tiny_array.join(",")  # before => 3,4
        messing(@tiny_array)
        puts @tiny_array.join(",")  # after  => 703,1003
    end
end

question = DoNotUnderstand.new
Run Code Online (Sandbox Code Playgroud)

@tiny_array是的[3,4],[703,1003]
如果我不使用课程,那就会发生:

@tiny = [1,2]
def messing(ary)
    return [ary[0]+693,ary[1]+999]
end

puts @tiny.join(",")                        # before  => 1,2
messing(@tiny)
puts @tiny.join(",")                        # after   => 1,2
Run Code Online (Sandbox Code Playgroud)

数组只是[1,2]
为什么?

phi*_*ory 6

这堂课是红鲱鱼,与这个问题完全无关.

在第一种情况下,修改了数组,您定义messing为:

def messing(ary)
  return [ary[0]+=700, ary[1]+=999]
end
Run Code Online (Sandbox Code Playgroud)

而在第二种情况下,当将阵列修改,则定义messing为:

def messing(ary)
  return [ary[0]+693,ary[1]+999]
end
Run Code Online (Sandbox Code Playgroud)

在您使用的一个案例中+=,在另一个案例中,您仅使用了+.

ary[0] += 700完全等同于ary[0] = ary[0] + 700.换句话说,您正在更改存储在第0个索引中的值ary.

在第二种情况下,您只需添加存储在数组中的值并返回结果,但在第一种情况下,您不仅返回结果,还将其存储回数组中.

为什么修改的说明ary修改@tiny_array,看到这个答案的问题是Ruby的传递通过引用或值?.