前田です。
以下のようなファイルを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)'
[#<Module:0xb7d63060>, Foo, Object, Kernel]
foo
--
前田 修吾