青山です。 Wed, Apr 07, 1999 at 06:37:40PM +0900 において 中村暁史 さん曰く: > で、その固められたモノ「が」指してる別のロッカーは > 無関係だから別途いじれるわけですね(^^; ここもわかりやすい説明というのは難しいですね。 ロッカーの中身が別のロッカーの札の場合、その別のロッカーの中身を変更す る事は可能です。 $ ruby -e 'value = ["a"]; value.freeze; value[0].concat "b"; p value' ["ab"] しかし、その鍵がかかったロッカーの中身自体はやはり変更できません。 $ ruby -e 'value = ["a"]; value.freeze; value.concat "b"; p value' /tmp/rba00410:1:in `concat': can't modify frozen array (TypeError) from /tmp/rba00410:1 value の示すロッカーの中身は "a" の入った別のロッカーの札であり、 freeze するとその札以外はもやは入れられない。しかし、"a" の入ったロッ カーには鍵がかかっていないので、"a" には追加できる。と。そんな感じでしょ うか。 で、そのロッカーはもちろん追加だけでなく入れ換えもできないのですが、 $ ruby -e 'value = ["a"]; value.freeze; value[0] = "b"; p value' /tmp/rba00419:1:in `[]=': can't modify frozen array (TypeError) from /tmp/rba00419:1 そのロッカーの番号を書いてあった value という札の方は、やはり依然とし て消しゴムで消して新たなロッカーの番号に書き換えられる。と。 $ ruby -e 'value = ["a"]; value.freeze; value = "b"; p value' "b" -- 青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>