Reputation: 547
I know the ::
in Ruby is a scope resolution operator to access methods within modules and classes, but is it proper to name classes using ::
?
Example
class Foo::Bar::Bee < Foo::Bar::Insect
def a_method
[...]
end
end
Upvotes: 5
Views: 2156
Reputation: 80041
If by “proper” you mean syntactically correct — yes.
There's nothing inherently wrong with doing it, and if you're defining a subclass in a separate file (example below) then it's a relatively common practice.
# lib/foo.rb
module Foo
end
# lib/foo/bar.rb
class Foo::Bar
end
I would avoid defining classes this way if you cannot be sure that the parent module or class already exists, though, as you'll get a NameError
due to the parent (e.g. Foo
) not existing. For this reason, you won't see much open source software that follows the more terse pattern.
class Foo::Bar
end
module Foo
class Bar
end
end
Upvotes: 5
Reputation: 78423
The usage is perfectly valid.
Just be wary of the gotcha:
class Foo::Bar; end # uninitialized constant Foo (NameError)
This will work fine:
module Foo; end
class Foo::Bar; end
Upvotes: 1
Reputation: 29389
Yes, that usage is perfectly valid. The format is simply a way to reference the constant; the expression resolves to a single constant all the same.
Upvotes: 0