Development Tip

루비 클래스 상속 :`<<`(두 배 미만)이란 무엇입니까?

yourdevel 2020. 10. 28. 21:13
반응형

루비 클래스 상속 :`<<`(두 배 미만)이란 무엇입니까?


class << Awesomeness

이것은 무엇입니까 <<? 검색했지만 결과는 문자열 연결에 대해서만 알려줍니다.


class << something싱글 톤 클래스의 구문은 사실이지만 다른 누군가가 말했듯이 클래스 정의 내에서 클래스 메서드를 정의하는 데 가장 자주 사용됩니다. 그러나이 두 가지 사용법은 일관됩니다. 방법은 다음과 같습니다.

Ruby를 사용하면 다음과 같이 특정 인스턴스에 메서드를 추가 할 수 있습니다.

class << someinstance
  def foo
    "Hello."
  end
end

이것은 foo클래스가 아니라 특정 인스턴스에 메서드 추가 합니다. (실제로 foo는 인스턴스의 "단일 클래스"에 추가되지만 이는 다소 구현상의 문제입니다.) 위의 코드가 실행 된 후 foo 메서드를 어떤 인스턴스로 보낼 수 있습니다.

someinstance.foo   => "Hello."

그러나 동일한 클래스의 다른 인스턴스에 foo를 보낼 수 없습니다. 그것이 <<명목상 목적입니다. 그러나 사람들은 다음과 같은 구문 체조에이 기능을 더 일반적으로 사용합니다.

class Thing
  def do_something
  end

  class << self
    def foo
      puts "I am #{self}"
    end
  end
end

이 코드 (이 클래스 정의)가 실행되면 무엇 self입니까? 클래스 Thing입니다. 이는 class << self"다음 메소드를 Thing 클래스에 추가"라고 말하는 것과 같습니다. 즉, foo는 클래스 메서드입니다. 위의 작업이 완료되면 다음을 수행 할 수 있습니다.

t = Thing.new
t.do_something  => does something
t.class.foo     => "I am Thing"
t.foo           => NoMethodError: undefined method `foo'

무엇 <<을하고 있는지 생각할 때 모든 것이 의미가 있습니다. 특정 인스턴스에 추가하는 방법이며 일반적인 경우 추가되는 인스턴스는 클래스이므로 블록 내의 메서드는 클래스 메서드가됩니다.

간단히 말해, 클래스 정의 블록 내에서 클래스 메서드를 만드는 간결한 방법입니다. 또 다른 방법은 이렇게하는 것입니다.

class Thing
  def self.foo
    # ...
  end
end

같은 것. 귀하의 예제는 실제로 구문 오류이지만 <<인스턴스 및 클래스 키워드와 함께 사용되는 방법을 이해 하면 수정하는 방법을 알 수 있습니다.


<<"Singleton 클래스 정의" 구문입니다 . 다음은 "일반적으로"사용되는 위치 / 방법 의 예 입니다.

여기 a = "abc"; a << "xyz"에는 "데이터 추가"(문자열, 배열 등)에 대한 구문이 있습니다.


질문 제목을 기반으로 상속을 원하면 다음 중 하나를 원합니다 <.

class Awesome < ParentAwesomeness

제공 한 코드는 유효한 루비가 아닙니다.

class Awesomeness
end

class Awesome << Awesomeness
end

SyntaxError: (irb):3: syntax error, unexpected tLSHFT, expecting '<' or ';' or '\n'

참고 URL : https://stackoverflow.com/questions/6182628/ruby-class-inheritance-what-is-double-less-than

반응형