Skip to content

Commit

Permalink
* doc/syntax/refinements.rdoc: update documentation to reflect
Browse files Browse the repository at this point in the history
  recent changes.
  [ci skip] [ruby-core:71466] [Misc #11681] Patch by James Adam

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52629 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
shugo committed Nov 18, 2015
1 parent 9876377 commit 4642573
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 26 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Wed Nov 18 10:05:25 2015 Shugo Maeda <shugo@ruby-lang.org>

* doc/syntax/refinements.rdoc: update documentation to reflect
recent changes.
[ci skip] [ruby-core:71466] [Misc #11681] Patch by James Adam

Wed Nov 18 09:50:21 2015 Naotoshi Seo <sonots@gmail.com>

* test/logger/test_logdevice.rb: Fix tests of logger to make it work on
Expand Down
60 changes: 34 additions & 26 deletions doc/syntax/refinements.rdoc
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,21 @@ Activate the refinement with #using:

== Scope

You may only activate refinements at top-level, not inside any class, module
or method scope. You may activate refinements in a string passed to
Kernel#eval that is evaluated at top-level. Refinements are active until the
end of the file or the end of the eval string, respectively.
You may activate refinements at top-level, and inside classes and modules.
You may not activate refinements in method scope. Refinements are activated
until the end of the current class or module definition, or until the end of
the current file if used at the top-level.

Refinements are lexical in scope. When control is transferred outside the
scope the refinement is deactivated. This means that if you require or load a
file or call a method that is defined outside the current scope the refinement
will be deactivated:
You may activate refinements in a string passed to Kernel#eval. Refinements
are active the end of the eval string.

Refinements are lexical in scope. Refinements are only active within a scope
after the call to using. Any code before the using statement will not have the
refinement activated.

When control is transferred outside the scope the refinement is deactivated.
This means that if you require or load a file or call a method that is defined
outside the current scope the refinement will be deactivated:

class C
end
Expand Down Expand Up @@ -136,6 +142,26 @@ In a file:
end
# activated here

In a class:

# not activated here
class Foo
# not activated here
def foo
# not activated here
end
using M
# activated here
def bar
# activated here
end
# activated here
end
# not activated here

Note that the refinements in M are not activated automatically if the class
Foo is reopened later.

In eval:

# not activated here
Expand Down Expand Up @@ -182,24 +208,6 @@ called:

p [{1=>2}, {3=>4}].to_json # prints "[{\"1\":2},{\"3\":4}]"

You may also activate refinements in a class or module definition, in which
case the refinements are activated from the point where using is called to
the end of the class or module definition:

# not activated here
class Foo
# not activated here
using M
# activated here
def foo
# activated here
end
# activated here
end
# not activated here

Note that the refinements in M are not activated automatically even if the class
Foo is reopened later.

== Method Lookup

Expand Down

0 comments on commit 4642573

Please sign in to comment.