[exerb-dev:0481] Re: DATAオブジェクトがきかない(再送)

アーカイブの一覧に戻る

Masahiro Kitajima katon****@katon*****
2006年 5月 31日 (水) 23:08:22 JST


 残念ながら、現状の Exerb ではそうなっちゃいますね。

---- test.rb ----
s=<<EOS
while line = DATA.gets do
    print line
end
__END__
test_data1
test_data2
EOS

eval(s)
---- test.rb ----
#=>
test.rb:10: (eval):1: uninitialized constant DATA (NameError)

 これと同じ現象だと思います。

#  定数 DATA を定義するのは ruby.c:load_file() ですが、
# exerb_execute() から呼ばれる 
# exerb_load_ruby_script(const FILE_ENTRY_HEADER *file_entry) は、
# eval を使っているので。

 Exerb 側の対応案を Ruby で表現してみました。

require 'stringio'
if /^__END__\n(.*)\Z/m =~ s
  Object.const_set('DATA', StringIO.new($1))
end
eval(s)

-- 
北島雅博(かとんぼ)




exerb-developer メーリングリストの案内
アーカイブの一覧に戻る