我正在尝试Ruby,无法理解某些事情。 我有一些课:
class Some_class
def method_a
var = '123'
method_b(var)
end
def method_b(var)
...
return var
end
end
method_b更改var并返回它(如果需要,可以像md5哈希一样)。这是我想念的事情:
如果我这样做
def method_a
var = '123'
method_b(var)
method_b(var)
b = method_b(var)
return (b == var)
end
然后method_a返回true。我必须做.dup以避免它。为什么会这样? Ruby中的方法也是对象,var只包含method_b上的链接?还是发生了别的什么?
谢谢你,对不起我的英语,那不是我的母语。
答案 0 :(得分:0)
您将var
作为对象的引用传递给method_b
。在此方法内修改此对象。这就是为什么var
(包含对同一对象的引用)在method_b
调用后返回修改后的值的原因。
答案 1 :(得分:0)
我尝试过以下代码,你可以看到结果
ROR: 058 > def method_a
059?> var = '123'
060?> b=method_b(var)
061?> var == b
062?> end
O/P => :method_a
ROR: 063 >
064 > def method_b(var)
065?> var = 'shiva'
066?> return var
067?> end
O/P => :method_b
ROR: 068 > method_a
O/P => false
和
ROR: 069 > def method_a
070?> var = '123'
071?> method_b(var)
072?> method_b(var)
073?> b = method_b(var)
074?> return (b == var)
075?> end
O/P => :method_a
ROR: 076 > method_a
O/P => false
在上述实验中结果是错误的
method_b永远不会修改method_a中的变量'var'。
您可能在method_b中遇到逻辑问题。