ruby での値渡し

\ あなたにピッタリの銘柄がみつかる /

みんかぶプレミアムを無料体験!

プランをみる

さらにお得なキャンペーン!

資産形成応援キャンペーン

期間内であればいつでもエントリーOK

2013/10/18 - LONERさんの株式ブログ。タイトル:「ruby での値渡し」 本文:ruby

株式会社ミンカブ・ジ・インフォノイド
(C) MINKABU THE INFONOID, Inc.

ruby での値渡し

LONERさん
LONERさん
ruby では値渡ししかない。ただしこれはオブジェクトIDの値渡しなので、オブジェクトそのものに対する操作はメソッドを抜けた後でも影響が残る。たとえば下の関数は、(サンプルの関数だが)引数に渡したオブジェクト自身が変更される。

def ex_func?(text)
["\r", "\n", "\t", " ", " "].each{|ec| text.delete!(ec)}

return false
end

破壊的メソッドは、オブジェクト自身に対して操作をするため、オブジェクトの内容が変更される。ではjavaでいうプリミティブのような渡し方はできないのか。
each の中を text = text.delete!(ec) ってな感じにすれば 引数に渡したオブジェクトは変更されない。しかしそれでは、オブジェクトが何回もつくられる。それはたぶんコスト高だと思うので、やはり破壊的メソッドを使いたい。
そこで・・・cloneを使って別のオブジェクトを作成し、そのオブジェクトに対して破壊的メソッドを実行する。

def ex_func?(text)
text = text.clone
["\r", "\n", "\t", " ", " "].each{|ec| text.delete!(ec)}

return false
end

この方法ならやりたいことができる。
LONERさんのブログ一覧