irb(main):001:0> class MyClass < Array
irb(main):002:1> def my_method
irb(main):003:2> 'Hello!'
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> c = Class.new(Array) do
irb(main):007:1* def my_method
irb(main):008:2> 'Hello!'
irb(main):009:2> end
irb(main):010:1> end
=>
irb(main):011:0> MyClass = c
(irb):11: warning: already initialized constant MyClass
=> MyClass
irb(main):012:0> c.name
=> "MyClass"
irb(main):013:0>
irb(main):013:0> str = "just a regular String"
=> "just a regular String"
irb(main):014:0> def str.title?
irb(main):015:1> self.upcase == self
irb(main):016:1> end
=> nil
irb(main):017:0> str.title?
=> false
irb(main):018:0> str.methods.grep(/title?/)
=> [:title?]
irb(main):019:0> str.singleton_methods
=> [:title?]
irb(main):020:0> str2 = "JUST A TITLE"
=> "JUST A TITLE"
irb(main):021:0> def str2.title?
irb(main):022:1> self.upcase == self
irb(main):023:1> end
=> nil
irb(main):024:0> str2.title?
=> true
irb(main):025:0>
irb(main):025:0> class C
irb(main):026:1> def a_method
irb(main):027:2> 'C#a_method()'
irb(main):028:2> end
irb(main):029:1> end
=> nil
irb(main):030:0> class D < C; end
=> nil
irb(main):031:0> obj = D.new
=>
irb(main):032:0> obj.a_method
=> "C#a_method()"
irb(main):033:0> class Object
irb(main):034:1> def eigenclass
irb(main):035:2> class << self; self; end
irb(main):036:2> end
irb(main):037:1> end
=> nil
irb(main):038:0> "abc".eigenclass
=>
irb(main):039:0> class << obj
irb(main):040:1> def a_singleton_method
irb(main):041:2> 'obj#a_singleton_method()'
irb(main):042:2> end
irb(main):043:1> end
=> nil
irb(main):044:0> obj.eigenclass
=>
irb(main):045:0> obj.eigenclass.superclass
=> D
irb(main):046:0> class C
irb(main):047:1> class << self
irb(main):048:2> def a_class_method
irb(main):049:3> 'C.a_class_method()'
irb(main):050:3> end
irb(main):051:2> end
irb(main):052:1> end
=> nil
irb(main):053:0> C.eigenclass
=>
irb(main):054:0> C.class
=> Class
irb(main):055:0> D.eigenclass
=>
irb(main):056:0> D.class
=> Class
irb(main):057:0> D.eigenclass.class
=> Class
irb(main):058:0> C.eigenclass.class
=> Class
irb(main):059:0> D.eigenclass.superclass
=>
irb(main):060:0> C.eigenclass.superclass
=>
irb(main):061:0> D.a_class_method
=> "C.a_class_method()"
irb(main):062:0> class MyClass
irb(main):063:1> attr_accessor :a
irb(main):064:1> end
=> nil
irb(main):065:0> obj = MyClass.new
=> []
irb(main):066:0> obj.a = 2
=> 2
irb(main):067:0> obj.a
=> 2
irb(main):068:0> class MyClass
irb(main):069:1> class << self
irb(main):070:2> attr_accessor :c
irb(main):071:2> end
irb(main):072:1> end
=> nil
irb(main):073:0> MyClass.c = 'It works!'
=> "It works!"
irb(main):074:0> MyClass.c
=> "It works!"