obj1 obj2 Ruby some_method? JavaScript, some_method ( Child)?
. Ruby Language : " , ". . Ruby , , , , .
. , , . . (, , .)
- , Ruby, Ruby ?
, .
Ruby, , () . (, MRI, YARV, Rubinius, MRuby, Topaz, tinyrb, RubyGoLightly), , (, XRuby JRuby on Java, Ruby.NET IronRuby CLI, SmallRuby, smalltalk.rb, Alumina MagLev Smalltalk, MacRuby RubyMotion Objective-C/Cocoa, , ActionScript/Flash, BlueRuby SAP/ABAP, HotRuby Opal.rb ECMAScript)
, ?
, Ruby , , . , Ruby JavaScript, , , , , , BasicObject.
, , , , , (MRI, YARV, Rubinius, JRuby, IronRuby, MagLev, Topaz).
, , . String String 116. , String Ruby!
ruby -e 'p ObjectSpace.each_object(String).count'
, require - , ( ), 10000 . 100 String. .
! Ruby monkeypatch. , String? Ruby .
, String. , . , , : String, Comparable, Object, Kernel BasicObject. , require?
, , Ruby, . , ( -Ruby):
struct Object
object_id: Id
ivars: Dictionary<Symbol, *Object>
class: *Class
end
, :
struct Module
methods: Dictionary<Symbol, *Method>
constants: Dictionary<Symbol, *Object>
cvars: Dictionary<Symbol, *Object>
end
, :
struct Class
methods: Dictionary<Symbol, *Method>
constants: Dictionary<Symbol, *Object>
cvars: Dictionary<Symbol, *Object>
superclass: *Class
end
, Ruby class . , superclass , , . , method_missing , , , , ( , method_missing , , ).
, : ! . , , singleton :
struct Object
object_id: Id
ivars: Dictionary<Symbol, *Object>
class: *Class
singleton_class: Class
end
, .
? , , :
struct Module
methods: Dictionary<Symbol, *Method>
constants: Dictionary<Symbol, *Object>
cvars: Dictionary<Symbol, *Object>
mixins: List<*Module>
end
struct Class
methods: Dictionary<Symbol, *Method>
constants: Dictionary<Symbol, *Object>
cvars: Dictionary<Symbol, *Object>
superclass: *Class
mixins: List<*Module>
end
: , , (es), , , "" " , , ( .., ), ".
? ! . - - , . , Ruby (, MRI, YARV), , , "" "" .
, , :
struct Object
object_id: Id
ivars: Dictionary<Symbol, *Object>
class: *Class
singleton_class: Class
end
, . . , , , :
struct Class
methods: *Dictionary<Symbol, *Method>
constants: *Dictionary<Symbol, *Object>
cvars: *Dictionary<Symbol, *Object>
superclass: *Class
visible?: Bool
end
, singleton . mixin M C, Ruby M′, , cvar- mixin. mixin C, C mixin:
M′ = Class.new(
methods = M->methods
constants = M->constants
cvars = M->cvars
superclass = C->superclass
visible? = false
)
C->superclass = *M'
, , , M ( ), , .
:
def lookup(meth, obj)
c = obj->class
until res = c->methods[meth]
c = c->superclass
raise MethodNotFound, meth if c.nil?
end
res
end
, .
, , , , , . Object#class Class#superclass? , ?
, Module#prepend . Refinements , Ruby .