Is ruby pass by reference or value?を読んだ後、私はたくさんのことを学んだことがありますが、私はそれを読んでいたよりも多くの質問が残っています。このRubyの例の値渡しの理解
まず、グローバルスコープbaz
に値を持っています
はここ
def foo(bar)
bar = 'reference'
end
baz = 'value'
foo(baz)
puts "Ruby is pass-by-#{baz}"
出力 Ruby is pass-by-value
が、これがどのように機能するかを詳細に分析する私の試みである、次の例を考えてみましょうvalue
。
ここでfoo
は、パラメータを受け取り、それに渡すものはすべてlocal
レベルです。我々はbaz
を渡すとき
したがって、reference
に等しいANOTHER baz
があるが、我々はそれがvalue
印刷グローバルレベルでこれを置く場合、これは、結果として、ローカルレベルです。私は上記の言ったことは真実であるならば
今すぐ
def foo(bar)
bar.replace 'reference'
end
baz = 'value'
foo(baz)
puts "Ruby is pass-by-#{baz}"
出力
Ruby is pass-by-reference
別の例を考えて、ここで.replace
方法は、グローバルbaz
を変更するのですか?私はこれを正しく解釈していますか?私の試みの間違いを指摘してください、私は右のトラックに私の場合は手がかりがありません。
ありがとうございます!
EDIT
もっとマジック
def my_foo(a_hash)
a_hash["test"]="reference"
end;
hash = {"test"=>"value"}
my_foo(hash)
puts "Ruby is pass-by-#{hash["test"]}"
方法によって別の魔法の例を追加しました..私の脳のdoesent get it -__- – bill
もう一つの魔法の例を追加しました – bill
'foo'を呼び出すと' bar'が 'baz'のコピーに初期化されません。これはこの最初の瞬間に同じ物体を指しています。 –