Ruby의 갈고리 방법 및 메소드 호출에 대한 실례 설명 갈고리 추가
Class#inherited 방법도 이러한 갈고리 방법으로 하나의 클래스가 계승될 때 루비가 이 방법을 호출합니다.기본적으로 Class #inherited는 아무것도 하지 않지만 상속을 통해 이 사건을 차단하고 관심 있는 상속 사건에 대응할 수 있습니다.
class String
def self.inherited(subclass)
puts “#{self} was inherited by #{subclass}”
end
end
class MyString < String; end
출력:
String was inherited by MyString
갈고리 방법을 사용하면 루비의 클래스나 모듈의 생명주기에 관여할 수 있고 프로그래밍의 유연성을 크게 높일 수 있다.방법 호출에 갈고리를 추가하는 실례
루비는 included,inhered,method_ 등 유용한 갈고리가 많다missing.방법 호출에 갈고리를 추가하면alias로 별명을 둘러싸서 실행할 수 있지만, 결국은 좀 번거롭다.alias_method_chain 정의 with_feature 방법도 번거롭기 때문에 다음module, include 후 method_ 호출callback :before_method,:after_method는 before_method 추가 after_method 갈고리
module AfterCall
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def after_call when_call,then_call,*args_then,&block_then
alias_method "old_#{when_call}",when_call
define_method when_call do |*args_when,&block_when|
send "old_#{when_call}",*args_when,&block_when
send then_call,*args_then,&block_then
end
end
end
end
class Student
include AfterCall
def enter_class sb
puts "enter class #{sb}"
yield('before') if block_given?
end
private
def after_enter_class pop
puts "after enter class #{pop}"
yield('after') if block_given?
end
protected
def third_after
puts "from third enter"
end
after_call :after_enter_class ,:third_after
after_call :enter_class ,:after_enter_class,"doubi", &lambda {|x|puts "from lambda #{x}"}
end
Student.new.enter_class "1" do |x|
puts "from lambda #{x}"
end
실행 결과는 다음과 같습니다.
#enter class 1
#from lambda before
#after enter class doubi
#from lambda after
#from third enter
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ruby의 단일 메소드 및 단일 클래스 상세 정보단일 방법 Ruby는 단일 객체에만 적용되는 단일 객체 추가 방법을 단일 방법이라고 합니다. 또한 위에서 사용한 정의 방법 외에 Object#define_를 통해singleton_method 방법으로 단일 방법 정의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.