Refinement 클래스
Refinement 클래스
Refinement은 refine 문 안에서의 self(현재 컨텍스트)를 나타내는 클래스예요. 이를 통해 다른 모듈에서 메서드를 가져올 수 있어요. import_methods를 참고하세요.
출처: Ruby 3.3 API
본문
Public Instance Methods
import_methods(module, ...) → self
모듈에서 메서드를 가져와요. Module#include와 달리, Refinement#import_methods는 메서드를 복사해서 refinement에 추가해요. 그래서 가져온 메서드 안에서도 refinement가 활성화돼 있어요.
메서드를 복사하는 방식이라서 Ruby 코드로 정의된 메서드만 가져올 수 있다는 점을 주의하세요.
module StrUtils
def indent(level)
' ' * level + self
end
end
module M
refine String do
import_methods StrUtils
end
end
using M
"foo".indent(3)
#=> " foo"
module M
refine String do
import_methods Enumerable
# Can't import method which is not defined with Ruby code: Enumerable#drop
end
end
refined_class → class
사용되지 않음(deprecated)이며, target을 권장해요. 수신자가 정제(refine)하는 클래스를 반환해요.
target → class_or_module
수신자가 정제(refine)하는 클래스 또는 모듈을 반환해요.
module M
refine String do
end
end
M.refinements[0].target # => String