From: Satoshi GUNJI Date: 2011-02-23T17:30:26+09:00 Subject: [ruby-list:47917] Re: 2 種類のリテラル 郡司と申します。 #雑談です ;-) > きしもとです > インスタンスがシングルトンないし有限個なオブジェクトは > 同じオブジェクトが返ってくるほうになりますかね。 なんか「シングルトンなリテラル」でいいような気がしてきました。 識者のご意見を伺いたいところです。 > リテラルとは何か、という話にもなりそうに思いますが、(たまたま手元に > あった)岩波情報科学辞典や、FOLDOC では、リテラルとは定数である、という > 流儀で説明されていますが、(たとえば)Ruby のリテラルとは違う感じが > しますね。 「直接オブジェクトを生成する式」という表現が一番しっくり来ますね。 http://i.loveruby.net/ja/rhg/book/minimum.html > Bignum だとキャッシュする実装もあっておかしくないように感じます。 ですね。なぜ毎回違うオブジェクトが生成されるのかは、 識者の方の解説を期待してみたり。 で、さらに余談なのですが、もともとの話は 「常に同じオブジェクトが返るリテラルのことを何と呼ぶか」 という話だったかと思うのですが、たとえば 10000000000 というリテラル表現がありますが、これは32ビットCRuby環境だと Bignumが返り、64ビットCRuby環境ではFixnumが返ります。 ・32bit CRuby -------- irb(main):001:0> 10000000000.class => Bignum irb(main):002:0> 10000000000.object_id => -609828758 irb(main):003:0> 10000000000.object_id => -609839038 irb(main):004:0> -------- ・64bit CRuby -------- irb(main):001:0> 10000000000.class => Fixnum irb(main):002:0> 10000000000.object_id => 20000000001 irb(main):003:0> 10000000000.object_id => 20000000001 irb(main):004:0> -------- で、「常に同じオブジェクトが返るリテラル表現」に名前があったとして、 たとえば 10000000000 はそれに該当するのでしょうか。 #「32ビットのCRubyの環境では該当しないが、64ビットのCRubyの #環境ならそれに該当する」みたいな前提をつければいいのかも #しれませんが、なんだか面倒‥‥。