[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だっ
たかで見た気がします.
ということで,どっちにしても↑のコードは今は必要ないんじゃな
いかなぁと思います.