From: "俊(とし)" Date: 2011-02-11T13:35:16+09:00 Subject: [ruby-list:47862] リテラルの式展開の速度? 初心者ですが、要望があって投稿します。 正規表現で繰り返し使用するリテラルを変数または定数の中に格納しておき、それを #{...} で展開して使用したいのですが、この式展開はあまり速くないように見えます。例えば、 n = 1000000 C0 = '\s\|\s' line0 = "abc | 123" time0 = Time.now() for i in 0..(n-1) /\s\|\s/ =~ line0 end time1 = Time.now() time2 = Time.now() for i in 0..(n-1) /#{C0}/ =~ line0 end time3 = Time.now() $stderr.print (time1 - time0), "\n" $stderr.print (time3 - time2), "\n" というコードを走らせると、最初のループと次のループの実効速度には一桁以上の差が見られます。変数のリテラル展開は毎回変数の評価が必要なので、しかたがないと思うのですが、定数はスクリプトのコンパイル時に評価できるはずなので、直接リテラルを記述するのと同程度にできるのでは?と思います。 初心者の思い違いかも知れませんが、将来改善していただけると大変ありがたく思います。 -- 俊(とし)