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

attr_accessor, attr_writer 및 attr_reader 사용 방법

이 문서는 속성 접근자(attr_accessor ) 루비에서.

바쁘시다면 아래로 스크롤하세요.

다음을 설명하는 것으로 시작하고 싶기 때문입니다.

속성 접근자를 사용하는 이유 !

인스턴스 변수가 있는 클래스가 있고 이를 외부 세계에 노출하려고 한다고 가정해 보겠습니다.

어떻게?

메소드를 정의해야 합니다.

메서드만 인스턴스 변수에 액세스할 수 있습니다.

왜?

이렇게 하지 않으면 오류가 발생하기 때문입니다.

예시 :

class Food
  def initialize(protein)
    @protein = protein
  end
end

bacon = Food.new(21)
bacon.protein

# NoMethodError: undefined method `protein'

NoMethodError protein 값을 요청할 때 발생하는 오류입니다. 적절한 설정 없이.

해결책은 무엇입니까?

이와 같이 자신만의 방법을 정의할 수 있습니다. :

class Food
  def protein
    @protein
  end
end

bacon.protein
# 21

다른 OOP 언어에서는 이것을 "게터" 메서드라고 합니다. 인스턴스 변수의 값을 가져오는 메소드를 정의합니다.

값을 변경할 수도 있습니다.

이를 위해서는 다른 방법이 필요합니다 , 다음과 같이:

class Food
  def protein=(value)
    @protein = value
  end
end

bacon.protein = 25

값을 변경할 수 있도록 개체에 대한 포털을 열고 있다고 상상해 보십시오.

이것이 바로 이것이 하는 일입니다.

지금 :

이런 종류의 메서드를 정의하는 더 좋은 방법이 있습니까?

일종의 지름길 같은 건가요?

네!

있습니다 🙂

바로 attr_accessor입니다. 들어옵니다.

Ruby attr_accessor 예제

attr_accessor를 사용하여 이러한 메소드를 생성하도록 Ruby에 지시할 수 있습니다. .

방법은 다음과 같습니다. :

class Food
 attr_accessor :protein

 def initialize(protein)
   @protein = protein
 end
end

이 줄을 보세요 :

attr_accessor :protein

이것은 다른 메소드를 생성하는 Ruby 메소드입니다.

어떤 방법?

이 예에서는 다음을 생성합니다.

  • protein
  • protein=

이것은 우리가 이전에 만든 것과 동일한 방법입니다...

하지만 이제 입력할 필요가 없습니다.

바로 가기입니다!

attr_accessor 대 attr_reader

attr_accessor 외에 , 다른 종류의 접근자도 있습니다.

정확한 세 가지 :

  • attr_accessor
  • attr_reader
  • attr_writer

이들의 차이점은 무엇입니까?

음, attr_accessor는 READER 및 WRITER 메서드를 모두 생성합니다.

  • attr_reader 독자만 생성합니다.

  • attr_writer 작성자만 생성합니다.

:

attr_reader 사용 값을 읽을 수만 있고 변경할 수는 없습니다. attr_writer 사용 값을 변경할 수만 있고 읽을 수는 없습니다.

여러 인스턴스 변수

여러 속성 메서드를 정의하고 싶으십니까?

할 수 있습니다.

하지만 올바른 구문을 사용해야 합니다.

좋아요 :

attr_reader :name, :value, :ready?

원하는 만큼 만들 수 있습니다.

동영상 튜토리얼 보기

요약

Ruby의 속성 접근자에 대해 배웠습니다! 3가지 메소드 세트(attr_accessor , attr_writer &attr_reader ) 클래스 외부에서 인스턴스 변수에 액세스하고 설정합니다.

이제 연습할 시간입니다.