-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello List,
I'm trying to understand the way Ruby resolves symbol names and how the
require statement fits in.
I'll start right away with an example, which comes in two files (note the
comments):
- ---%<---
# a.rb:
require 'a/b'
module Foo
class Foo::A
def do_something()
b = Foo::A::B.new
b.say
end
end
# a/b.rb:
require 'a'
module Foo
class Foo::A::B < Foo::A
def say
puts "Hello, World"
end
end
end
- --->%---
With the above code, I get a "missing symbol" error. Placing the "require
'a/b'" statement within the Foo::A class remedies it.
Now I'm not quite sure why. I know that require() is a statement like puts
in regards of its execution time, i.e. there's no special treatment in some
parse/compile/whatever phase before the actual execution begins. As such, it
seems logic that I get the missing symbol error with the original code:
Foo::A is not defined when the derivation is made, and as such, putting
require 'a/b' some lines later helps.
Am I correct with this explanation?
Is there any best practice regarding such a situation? While this example is
constructed, I'm trying to create a namespace hierarchy in which a class on
top mediates several others that live further below the hiearchy, but don't
derive from it.
I'm open for all kinds of suggestions.
Thanks alot in advance!
Eric
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
iEYEARECAAYFAkwWzmkACgkQhS0drJ3goJJSTwCfZ8mJghOxUeiAyApkQFo7PoBA
aT0An0GGVaN2aUIHJo8eMrmra7jS/xsy
=uQ4K
-----END PGP SIGNATURE-----