oop/nested_class_names.rb
tests/_examples/oop/nested_class_names.rb in the metorex repository.
# A class nested in a class can inherit from the class holding it.
class Parser
def name = "parser"
class Lexer < ::Parser
end
class Scanner < Parser
end
end
p(Parser::Lexer.superclass)
p(Parser::Scanner.superclass)
p(Parser::Lexer.new.name)
# Each class Struct.new answers is its own class.
Token = Struct.new(:type, :text)
Event = Struct.new(:name, :args)
token = Token.new(:ident, "x")
p(token.is_a?(Token))
p(token.is_a?(Event))
p(Event === token)
p(Class.new(Struct) === token)
# A method calls itself by name alone.
class Countdown
def initialize(from)
@from = from
end
def steps
return [] if @from.zero?
current = @from
@from -= 1
[current] + steps
end
end
p(Countdown.new(4).steps)
Output:
Parser
Parser
"parser"
true
false
false
false
[4, 3, 2, 1]