ruby での値渡し

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

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

プランをみる

お知らせ

読み込みに失敗しました。

しばらくしてからもう一度お試しください。

重要なお知らせ すべて見る

LONERさんのブログ

最新一覧へ

« 前へ26件目 / 全1039件次へ »
ブログ

ruby での値渡し

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

この方法ならやりたいことができる。
コメントを書く
コメントを投稿するには、ログイン(無料会員登録)が必要です。

ネット証券比較

みんかぶおすすめ