Misc #11681 ยป update-refinements-documentation.patch
doc/syntax/refinements.rdoc | ||
---|---|---|
== 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
|
||
... | ... | |
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
|
||
... | ... | |
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
|
||