2011年2月24日

[ruby-list:47923] Re: 2種類のリテラル

郡司です。

> きしもとです

> Fixnum とかシンボルの場合は、同じ値のオブジェクトなら同一のオブジェクトに
> 必ずなるという性質ゆえに、同じリテラル式は毎回同じオブジェクトを返す、
> という感じでしょうか。

ですね。

・「同じオブジェクトを返す」

というのと、

・「同じ値(値としては同じだけどObject IDは異なる)を返す」

というのと、

・「そのオブジェクトがImmutableである」

というのを分けて考える必要がありそうです。


> Ruby とか Python では思いつかないのですが、
>
> $ gosh
> gosh> (define (foo) '(1 2))
> foo
> gosh> (foo)
> (1 2)
> gosh> (set-car! (foo) 3)
> #<undef>
> gosh> (foo)
> (3 2)

Common Lispでも同じ事を試してみました。

--------
cl> (defun foo () '(1 2))
foo
cl> (foo)
(1 2)
cl> (setf (car (foo)) 3)
3
cl> (foo)
(3 2)
cl>
--------

関数定義中に生成されたオブジェクトは、その関数から
参照され続ける限りは同じもになるのですね。
(なので「同じオブジェクトが毎回返る」「そのオブジェクトは
破壊可能」が満たせる)


投稿者 xml-rpc : 2011年2月24日 13:52
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/102254
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。