2007年12月15日土曜日

Squeakのcopyを学ぶ

今日もSqueakについて勉強です.(やっと趣旨らしくなってきた)

Squeakのcopyについてです.

Object>>copy
^self shallowCopy postCopy

まずはshallowCopyについて勉強していました.

x := {{'a'}}.
y := x shallowCopy.
x == y. "false"
x at:1 put:'b'.
x #('b')
y #(#('a'))


x := {{'a'}}.
y := x shallowCopy.
x == y. "false"
(x at:1 )at:1 put:'b'.
x #(#('b'))
y #(#('b'))

なるほどshallowCopyはその意味通り浅いcopyみたいですね.
deepCopyがあるので,そちらを試すと完全コピーになるようです.

ただこれはお互いに参照していたら,大変なことになります.
なのでcopyはpostCopyをオーバーライドすることで振る舞いを変更してcopyをきちんと指定するみたいです.

copyは気をつけないといけませんね.(現実世界に無いことをやっているのだから,当然ですね).
きっと僕はdeepCopyを何かと使いたくなりそうな・・・.

VisualWorksを少しながめていたらdeepCopyというmethodはなかった.正しいかもしれませんね.

0 件のコメント: