Ruby类和方法更改变量

时间:2013-10-14 12:47:49

标签: ruby class oop methods

我正在尝试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上的链接?还是发生了别的什么?

谢谢你,对不起我的英语,那不是我的母语。

2 个答案:

答案 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 

在上述实验中结果是错误的

  1. method_b永远不会修改method_a中的变量'var'。

  2. 您可能在method_b中遇到逻辑问题。