今日も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 件のコメント:
コメントを投稿