Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby 슈퍼 키워드를 사용하는 방법

슈퍼 키워드는 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 팁을 받아보세요.