hirax.net::Keywords::「シャローコピー」のブログ



2009-06-06[n年前へ]

Rubyで「ディープコピー」を示す演算子が欲しい 

 ほとんど同じ動きをするソフトウェアを、ハードウェアを制御するシステムを、Mathematica、C++で作ったS-Functionを繋いだSimulinkモデル、そして、Rubyという3種類の異なる言語/システムで組んでみた。もっとも、Mathematicaのは、「考え」を作り出す・「考え」を整理するために使っているので、実際にはハードウェアには繋いで動かしているわけではないし、Rubyの場合もシリアルポートを介して外部ハードウェアとの入出力を行うことで、ハードウェア制御を行っている。

 Rubyでコードを書いていて、結構間違える・面倒くさいと感じてしまうのが、ディープコピー(値渡し)を自然に書けない、というところだ。とても小さなスクリプトを組む時には、シャローコピー(参照渡し)は便利で良いけれど、少し大きめのコード・クラスを組み合わせたコードを書いていると、ディープコピー(値渡し)をもう少し自然に・楽に書きたくなる。

 たぶん、言語のデフォルト状態で実装されていないということは、ディープコピーは使うべきではないのだろう。あるいは、それでも、使いたければ、

def dst=(Marshal.load(Marshal.dump(src)))
とでも書いて、演算子を再定義すれば良い(いや、少し違う演算子を定義すれば良いのだろうか)のかもしれない。しかし、何だかこれでは「一回ダンプして、もう一度読み直す」みたいな、マッチポンプの二度手間的な響きを感じてしまって、好きになれない。

 だから、Rubyで「ディープコピー」を示す演算子が欲しい。けれど、こんなことを「」思うときには、例外無くその言語・考え方に対する理解が足りないに違いない、とも思うのだけれど・・・。



■Powered by yagm.net