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

Ruby의 Self란 무엇이며 어떻게 사용합니까(명확하게 설명됨)

Ruby를 배우고 있다면 "self" 키워드의 사용이 매우 혼란스러울 수 있습니다.

어떻게 작동합니까?

self이란? , 정확히?

Ruby 키워드입니다. 현재 개체에 대한 액세스를 제공합니다.

<블록 인용>

물건이 무엇인지 모르신다면 제가 만든 이 영상을 보세요. 객체 지향 프로그래밍과 관련이 있습니다.

이 "현재 개체"는 컨텍스트에 따라 다릅니다.

문맥?

예, 컨텍스트는 주어진 순간에 코드가 있는 위치입니다.

예시 :

코드가 인스턴스 메서드 안에 있는 경우 self 인스턴스입니다. 그 클래스의. 즉, self 개체입니다.

이 작업을 직접 볼 수 있습니다.

이 코드 실행 :

def coffee
  puts self
end

coffee
# main

이 코드는 coffee를 정의하고 호출합니다. self의 값을 출력하는 메소드 .

main이 인쇄되는 이유 ?

최상위 개체의 이름이기 때문에 외부에 정의된 모든 메서드를 찾을 수 있는 개체입니다. 수업.

coffee 좋아요 방법입니다.

그러나 Cat라는 클래스 내부에 메서드를 정의하면 , self Cat 개체.

여기에서 볼 수 있듯이 :

class Cat
  def meow
    puts self
  end
end

Cat.new.meow
# <Cat:0x7a14c5>

이 예에서 우리는 self의 값이 어디에 사용하느냐에 따라 달라집니다.

지금 :

목적을 이해하면 무엇이든 더 잘 이해할 수 있다고 생각합니다.

self가 왜 유용한가요?

몇 가지 예를 살펴보겠습니다.

명확성을 위해 자아 사용

self의 실제 사용 메소드와 로컬 변수의 차이점을 구분할 수 있도록 하는 것입니다.

변수와 메서드의 이름을 동일하게 지정하는 것은 좋은 생각이 아닙니다. 그러나 그 상황에서 작업해야 하는 경우 self.method_name을 사용하여 메서드를 호출할 수 있습니다. .

제 말은 다음과 같습니다. :

class Example
  def do_something
    banana = "variable"

    puts banana
    puts self.banana
  end

  def banana
    "method"
  end
end

Example.new.do_something

# "variable"  => puts banana
# "method"    => puts self.banana

여기에 banana가 있습니다. do_something 내부의 지역 변수 방법이지만 banana도 있습니다. 방법.

지역 변수가 우선합니다.

이것이 self를 사용해야 하는 이유입니다. 여기에서 전화를 원하시면 banana 방법, 인쇄 대신 banana의 값 변수.

다음 :

좀 더 일반적인 사용 사례를 살펴보겠습니다... 클래스 메서드 정의!

Self를 사용하여 클래스 수준 메서드 정의

self의 첫 번째 용도 , 의심할 여지 없이 클래스 수준 메서드를 정의하는 것입니다.

본 적이 있을 것입니다.

이러한 def self.method_name 메소드 정의 .

좋아요 :

class Salad
  def self.buy_olive_oil
    # ...
  end
end

Salad.buy_olive_oil

self 이것은 Salad와 동일합니다. , 클래스 이름.

이것이 유용한 이유는 무엇입니까?

각 메서드 정의에 대해 클래스 이름을 사용할 필요가 없기 때문에 클래스를 변경하면 코드를 더 쉽게 변경할 수 있습니다.

또한 코드를 덜 시끄럽고 읽기 좋게 만듭니다.

이것이 우리가 def self.buy_olive_oil을 수행하는 이유입니다. def Salad.buy_olive_oil 대신 .

자신을 위한 다른 용도

네!

self에는 더 많은 용도가 있습니다. , 따라서 익숙해지면 도움이 됩니다.

예를 들어 :

현재 개체를 다른 개체와 비교하는 메서드에서 사용할 수 있습니다.

이런 것 :

def ==(other)
  self == other
end

self를 사용할 수도 있습니다. 디버깅 목적으로 작업 중인 개체를 확인합니다.

좋아요 :

p self

또는 반환 값으로 사용하여 빌더 디자인 패턴과 같은 디자인 패턴을 구현할 수 있습니다.

:

class Salad
  def initialize
    @ingredients = []
  end

  def add_nuts
    @ingredients << :nuts

    self
  end
end

my_salad = Salad.new.add_nuts

요약하자면, 다음은 자신을 위한 유용한 용도 목록입니다. :

  • 클래스 수준 메서드 정의
  • 동일한 이름의 지역 변수가 있는 경우 인스턴스 메소드 사용
  • Returning Self(빌더 패턴)
  • 디버깅
  • 객체 비교(==)
  • 메소드 호출의 기본 수신자

자기 대 자기 자신

이 주제를 끝내기 전에 한 가지 더 살펴보아야 합니다.

Kernel#itself 방법.

개체에 대해 호출할 수 있는 메서드이며 개체는 자체적으로 반환합니다.

:

[1,2,3,nil].select(&:itself)

# [1, 2 ,3]

이 예제는 nil을 필터링합니다. &false 가치.

차이점 이해 :

  • self 는 키워드입니다. 값은 위치에 따라 다릅니다. 당신은 그것을 사용
  • itself 방법이다. 가치는 무엇에 따라 달라집니다. 사용하는 개체(1.itself에서 , 1 개체)

도움이 되기를 바랍니다.

결론

Ruby self 키워드에 대해 정확히 무엇인지, 왜 유용한지, 어떻게 사용하는지 배웠습니다.

이제 여러분이 시도해 볼 차례입니다.

읽어 주셔서 감사합니다! 🙂