슈퍼 키워드는 Ruby에서 무엇을 합니까?
super를 호출하는 메서드와 이름이 같은 부모 클래스의 메서드를 호출합니다. .
예를 들어 :
i_like_chocolate라는 메서드를 호출하면 , 그런 다음 super를 호출합니다. 해당 메서드 내에서 Ruby는 이 메서드를 소유한 사람의 부모 클래스에서 같은 이름을 가진 다른 메서드를 찾으려고 시도합니다.
이는 일반 메서드 호출처럼 클래스 조상 체인을 통해 계속 버블링됩니다. .
메서드가 존재하지 않으면 NoMethodError가 트리거됩니다. 예외 및 method_missing 그것을 사용할 것입니다.
지금 :
몇 가지 코드 예제를 살펴보겠습니다!
인자 없는 슈퍼
다음 예에는 Cat가 있습니다. Animal에서 상속되는 클래스 .
Cat 클래스에 name이 있습니다. super를 사용하는 메소드 부모 클래스(Animal)에서 동일한 메서드를 호출하려면 ).
코드는 다음과 같습니다.
class Animal
def name
puts "Animal"
end
end
class Cat < Animal
def name
super
end
end
cat = Cat.new
cat.name
# "Animal"
Ruby 슈퍼 키워드 인수 유무에 관계없이 다르게 작동 .
인수 없음:
원래 메서드 호출에 사용된 인수를 새 메서드로 전달합니다. , 키워드 인수 및 블록(제공된 경우) 포함
예시 :
def puts(*) super end puts 1, 2, 3
클래스 외부에 정의된 이 메서드는 Object에 속합니다. . 이것은 원래 puts 전에 호출된다는 것을 의미합니다. 방법.
지금:
puts을 호출할 때 super를 사용하는 이 새로운 메소드를 호출합니다. 원래 puts 호출 .
Super vs Super() 사용 시기
super를 사용하는 방법을 살펴보았습니다. 부모 메서드를 호출하기 위한 것입니다.
그러나 상위 메소드가 동일한 수의 인수를 사용하지 않는다면 어떻게 될까요?
이 경우 다음을 사용할 수 있습니다.
super()논쟁의 여지가 없습니다super(arg1, arg2, ...)전달할 인수 선택
예 :
def puts super() end
여기서 괄호가 어떻게 특별한 의미를 갖는지 주목하세요. , 일반 메서드 호출과 다릅니다.
super에 대해 알아야 할 몇 가지 추가 사항 :
- 메소드 내에서만 사용할 수 있습니다.
- 상위 메소드를 호출한 결과를 반환합니다.
- 여러 번 호출할 수 있습니다.
굵은 선(super 반환 결과)는 super의 일부 용도를 이해하는 데 중요합니다. 야생에서 찾을 수 있습니다.
super를 사용할 수 있습니다. 데코레이터 패턴을 구현하거나 initialize 내부에서 호출하는 경우 메서드는 부모 클래스의 인스턴스 변수를 초기화하는 데 사용할 수 있습니다.
요약
Ruby 슈퍼 키워드에 대해 알아보았습니다. , 그것이 무엇이며 다양한 상황에서 어떻게 작동하는지!
이 기사가 도움이 되었다면 RubyGuides 뉴스레터를 구독하여 이와 같은 콘텐츠와 구독자에게만 제공되는 기타 유용한 Ruby 팁을 받아보세요.