diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-01-24 07:54:45 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-01-24 07:54:45 +0000 |
commit | dbcf20069a559142ee7c96aa0e8288b4e8b001fa (patch) | |
tree | 423393d8096088a96397522b79d9096e058076c8 /doc | |
parent | 96af5360a4089daf90743ad4722e77eff2261145 (diff) | |
download | ruby-dbcf20069a559142ee7c96aa0e8288b4e8b001fa.tar.gz |
* doc/syntax/calling_methods.rdoc: Added a Method Lookup section.
* doc/syntax/refinements.rdoc (Method Lookup): Clarified that
refinement methods are looked up in classes, not instances.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38928 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'doc')
-rw-r--r-- | doc/syntax/calling_methods.rdoc | 25 | ||||
-rw-r--r-- | doc/syntax/refinements.rdoc | 2 |
2 files changed, 26 insertions, 1 deletions
diff --git a/doc/syntax/calling_methods.rdoc b/doc/syntax/calling_methods.rdoc index a011144f71..79c0de59dc 100644 --- a/doc/syntax/calling_methods.rdoc +++ b/doc/syntax/calling_methods.rdoc @@ -322,3 +322,28 @@ avoid a warning. Unlike the splat operator described above the <code>&</code> operator has no commonly recognized name. +== Method Lookup + +When you send a message Ruby looks up the method that matches the name of the +message for the receiver. Methods are stored in classes and modules so method +lookup walks these, not the objects themselves. + +Here is the order of method lookup for the receiver's class or module +R+: + +* The prepended modules of +R+ in reverse order +* For a matching method in +R+ +* The included modules of +R+ in reverse order + +If +R+ is a class with a superclass, this is repeated with +R+'s superclass +until a method is found. + +Once a match is found method lookup stops. + +If no match is found this repeats from the beginning, but looking for ++method_missing+. The default +method_missing+ is BasicObject#method_missing +which raises a NameError when invoked. + +If refinements (an experimental feature) are active the method lookup changes. +See the {refinements documentation}[rdoc-ref:syntax/refinements.rdoc] for +details. + diff --git a/doc/syntax/refinements.rdoc b/doc/syntax/refinements.rdoc index c8581768fd..bb3096eee9 100644 --- a/doc/syntax/refinements.rdoc +++ b/doc/syntax/refinements.rdoc @@ -188,7 +188,7 @@ called: == Method Lookup -When looking up a method for a class +C+ Ruby checks: +When looking up a method for an instance of class +C+ Ruby checks: * If refinements are active for +C+, in the reverse order they were activated: * The prepended modules from the refinement for +C+ |