From: Shugo Maeda Date: 2005-08-25T18:04:37+09:00 Subject: [ruby-dev:26883] top level include on load(filename, true) 前田です。 以下のようなファイルをtest.rbとして保存して、 test.rb: ------------------------- module Foo def foo puts "foo" end end include Foo foo ------------------------- これをload(filename, true)でロードすると、以下のようなエラーに なります。 $ ruby -e 'load("test.rb", true)' /home/shugo/ruby/test.rb:7:in `append_features': cyclic include detected (ArgumentError) from /home/shugo/ruby/test.rb:7 from -e:1 また、Fooの定義をfoo.rbとして保存し、test.rbからrequireするように 変更すると、 foo.rb ------------------------- module Foo def foo puts "foo" end end ------------------------- test.rb: ------------------------- require "foo" include Foo foo ------------------------- 今度は以下のようなエラーになります。 $ ruby -e 'load("test.rb", true)' /home/shugo/ruby/test.rb:5: undefined local variable or method `foo' for main:Object (NameError) from -e:1 これらは意図された挙動でしょうか。 Rubyのバージョンは以下の通りです。 $ ruby -v ruby 1.8.3 (2005-08-24) [i686-linux] また、後者のコードでfooの呼びだしの前に class << self p ancestors end のようなコードを入れると、エラーがおきなくなります。 $ ruby -e 'load("test.rb", true)' [#, Foo, Object, Kernel] foo -- 前田 修吾