[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[kagemai-users:0603] Re: ruby1.8.5で動作せず



須藤です.

原因がわかりました.咳さんに教えてもらいました.

In <20061031.220047.20781705.kou@xxxxxxxxxxxx>
  "[kagemai-users:0602] Re: ruby1.8.5で動作せず" on Tue, 31 Oct 2006 22:00:47 +0900 (JST),
  Kouhei Sutou <kou@xxxxxxxxxxxx> wrote:

> なんでだろう.どこかに古いERBが転がっていたりしませんか?
> でも,ERBって影舞についてきますね.うーん.

新しいERBが入っているんだと思います.

新しいERBでは影舞がいじっているERB#set_eoutvar(というか
ERB::Compiler)の仕様が変わっています.

  http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/41960
  http://www.druby.org/ilikeruby/erbquote.html

解決策としてはkagemai/util.rbから

  class ERB
    alias set_eoutvar_orig set_eoutvar

    def set_eoutvar(compiler, eoutvar = '_erbout')
      compiler.put_cmd = "#{eoutvar} << "

      cmd = []
      cmd.push "#{eoutvar} = []"

      compiler.pre_cmd = cmd

      cmd = []
      cmd.push("#{eoutvar}.join")

      compiler.post_cmd = cmd
    end
  end

を削除するのがいいと思います.

もともと,↑の変更はruby 1.6の頃,Stringに<<していくよりも
Arrayに<<して最後にjoinした方が速いというのに基づいたハック
だったのだと思います.しかし,ruby 1.8ではどちらもそれほど大
差がない(String#<<の方が速かったかも)というのをruby-listだっ
たかで見た気がします.

ということで,どっちにしても↑のコードは今は必要ないんじゃな
いかなぁと思います.