weyus
July 12, 2006, 7:19pm
#1
Given two classes A and B, I know that I can loop through the
superclasses of A to determine it it’s a descendant of B.
Is there a more expedient way to do this - something like “is_a?” but at
the class level (since is_a? is for objects)?
Thanks,
Wes
weyus
July 12, 2006, 7:46pm
#3
Joel VanderWerf wrote:
Wes G. wrote:
Given two classes A and B, I know that I can loop through the
superclasses of A to determine it it’s a descendant of B.
Is there a more expedient way to do this - something like “is_a?” but at
the class level (since is_a? is for objects)?
if A < B
end
if A <= B
end
[A, B].sort
So is “<” the “superclass” assignment operator? Is it a method?
Seems like it operates differently in two contexts. It assigns in a
class declaration, but evaluates in a logical expression?
Am I understanding correctly?
Wes
weyus
July 12, 2006, 8:23pm
#4
Wes G. wrote:
if A <= B
end
[A, B].sort
So is “<” the “superclass” assignment operator? Is it a method?
It’s a comparison operator, and yep, it’s a method:
irb(main):012:0> string_lt = String.method("<")
=> #<Method: Class(Module)#<>
irb(main):013:0> string_lt.call File
=> nil
irb(main):014:0> string_lt.call Object
=> true
Seems like it operates differently in two contexts. It assigns in a
class declaration, but evaluates in a logical expression?
In “class Foo < Bar”, the < is just syntax. It isn’t being evaluated on
Foo and Bar.
weyus
July 12, 2006, 8:45pm
#5
Wes G. wrote:
I looked all over the Pickaxe reference to find it but I couldn’t it.
I guess the “basic” operators are not documented, even when they’re
overridden in clever ways?
Thanks,
Wes
Look in the Pickaxe 1st Ed., in the documentation for the Module class,
under “Instance Methods.” The <, <=, >, >= methods are documented.
“One module is considered greater than another if it is included in (or
is a parent class of) the other module. The other operators are defined
accordingly. If there is no relationship between the modules, returns
false for all operators.”
weyus
July 12, 2006, 8:27pm
#6
I looked all over the Pickaxe reference to find it but I couldn’t it.
I guess the “basic” operators are not documented, even when they’re
overridden in clever ways?
Thanks,
Wes
weyus
July 12, 2006, 9:02pm
#7
Wes G. schrieb:
I looked all over the Pickaxe reference to find it but I couldn’t it.
I guess the “basic” operators are not documented, even when they’re
overridden in clever ways?
Wes, you have to know that “Class” is a subclass of “Module”, and so it
inherits all methods from “Module”, among them the method “<”. See
http://phrogz.net/ProgrammingRuby/ref_c_module.html#Module._lt_cm_lt_eq_cm_lt_cm_lt_eq
The text says:
One module is considered greater than another if it is included in
(or is a parent class of) the other module.
Regards,
Pit