【问题标题】:Ruby classes and methods changes variablesRuby 类和方法更改变量
【发布时间】:2013-10-22 00:58:49
【问题描述】:

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

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

【问题讨论】:

    标签: ruby class oop methods


    【解决方案1】:

    我试过下面的代码,你可以看到结果

    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 内部的逻辑有问题。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢!但是,如果我想将 var 作为常用变量而不是作为参考传递怎么办?有办法吗?
      • @user2878816 Object#dup 返回对象的浅拷贝,所以我认为它应该适合您的目的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2014-03-06
      • 1970-01-01
      • 2013-05-28
      相关资源
      最近更新 更多