* 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
This commit is contained in:
drbrain 2013-01-24 07:54:45 +00:00
Родитель 96af5360a4
Коммит dbcf20069a
3 изменённых файлов: 32 добавлений и 1 удалений

Просмотреть файл

@ -1,3 +1,9 @@
Thu Jan 24 16:54:34 2013 Eric Hodel <drbrain@segment7.net>
* 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.
Thu Jan 24 16:49:17 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
* enum.c (enum_zip): Fix error message

Просмотреть файл

@ -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.

Просмотреть файл

@ -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+