0

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

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

4

2 回答 2

0

var作为对对象的引用传递给method_b. 此对象在此方法内部进行了修改。这就是为什么var(仍然包含对同一对象的引用)在method_b调用后返回修改后的值。

于 2013-10-14T13:00:19.023 回答
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 中的逻辑有问题。

于 2015-01-03T04:58:02.337 回答