Дословно "усовершенствования, совершенствовать". Метод, позволяющий обезопасить использование "monkey patching". Разработчикам Ruby известно, что метод "monkey patching" позволяет добавлять (изменять) любую функциональность к существующим (и что наиболее опасно - "базовым", "основным") классам Ruby - великая мощь этого механизма так же требует большой ответственности. "Усовершенствования" позволяют изолировать использование метода "monkey patching" в каком-то определенном файле. В последний момент перед выпуском Ruby 2.0.0 метод using был изменен таким образом, что его использование возможно только в глобальной области видимости, в области одного файла.
Важно помнить, что это эксперементальный механизм, который может быть изменен в следующих реализациях Ruby - warning: Refinements are experimental, and the behavior may change in future versions of Ruby!.
Пример:
module Ref
refine String do
def hello
puts "#{self} says : Hello, world"
end
end
end
String.new('Test').hello #=> undefined method 'hello' for "Test":String (NoMethodError)
using Ref
String.new('Test2').hello #=> Test2 says : Hello, world
class A
using Ref #=> undefined method 'using' for A:Class (NoMethodError)
end
Дословно "усовершенствования, совершенствовать". Метод, позволяющий обезопасить использование "monkey patching". Разработчикам Ruby известно, что метод "monkey patching" позволяет добавлять (изменять) любую функциональность к существующим (и что наиболее опасно - "базовым", "основным") классам Ruby - великая мощь этого механизма так же требует большой ответственности. "Усовершенствования" позволяют изолировать использование метода "monkey patching" в каком-то определенном файле. В последний момент перед выпуском Ruby 2.0.0 метод
using
был изменен таким образом, что его использование возможно только в глобальной области видимости, в области одного файла.Важно помнить, что это эксперементальный механизм, который может быть изменен в следующих реализациях Ruby - warning: Refinements are experimental, and the behavior may change in future versions of Ruby!.
Пример: