定义一个方法,名字是 change .. 添加一个参数,名字是 s .. 在方法里面,我们可以用一下 s 的 replace . 替换一下它的内容 ...
def change(s)
s.replace('新内容!')
end
再声明一个本地变量 .. 名字是 w ... 给它一个值 ... 原内容! 然后执行一下 change 这个方法 .. 再把上面声明的这个变量 w 交给这个方法 ..
然后我们再看一下 w 这个变量表示的值 ... 这个值变成了 新内容 ...
我们在 change 这个方法的主体里面,替换了参数 s 表示的这个对象的内容 .. 调用这个方法的时候,我们给它的参数提供了一个变量 .. 这个变量是对一个对象的引用 .. 所以在 change 方法里面的 s 这个参数表示的也是一个对某个对象的引用 ..
在方法里替换了这个对象的内容以后,所有的对这个对象的引用也都会得到这个新的内容 ...
重新再给 w 分配一个值 ...
如果你想保护 w 这个变量引用的对象不受影响 ... 在调用 change 这个方法的时候,把 w 这个变量交给它,再用一下 dup 这个方法,它会复制一份 w 这个变量引用的那个对象 ... 这样在方法里面对这个对象的操作是在这个对象的复制品上做的 ..
所以 s 表示的仍然是之前分配给它的内容 ...
我们也可以冻结一下 s 表示的这个字符串 ... 使用一下 freeze 这个方法 .. 再调用一下 change 方法,把变量 w 交给它 ...
这次会报一个错误 .. 提示我们 can't modify frozen String,不能修改冻结的字符串 ...