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

次のコードを試してみました。結果を確認できます

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 に答える
0

varオブジェクトへの参照として に渡しますmethod_b。このオブジェクトは、このメソッド内で変更されます。そのため、var(同じオブジェクトへの参照がまだ含まれている) は、method_b呼び出し後に変更された値を返します。

于 2013-10-14T13:00:19.023 に答える