summaryrefslogtreecommitdiff
path: root/doc/syntax
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-01-24 07:54:45 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-01-24 07:54:45 +0000
commitdbcf20069a559142ee7c96aa0e8288b4e8b001fa (patch)
tree423393d8096088a96397522b79d9096e058076c8 /doc/syntax
parent96af5360a4089daf90743ad4722e77eff2261145 (diff)
* 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/syntax')
-rw-r--r--doc/syntax/calling_methods.rdoc25
-rw-r--r--doc/syntax/refinements.rdoc2
2 files changed, 26 insertions, 1 deletions
diff --git a/doc/syntax/calling_methods.rdoc b/doc/syntax/calling_methods.rdoc
index a011144..79c0de5 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 c858176..bb3096e 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+