루비 클래스 상속 :`<<`(두 배 미만)이란 무엇입니까?
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
'Development Tip' 카테고리의 다른 글
이름으로 저장 프로 시저 찾기 (0) | 2020.10.28 |
---|---|
읽기 전용 속성을 구현하는 방법 (0) | 2020.10.28 |
ggplot에서 종횡비를 수정하는 방법은 무엇입니까? (0) | 2020.10.28 |
PHP에서 이미지 크기 조정 (0) | 2020.10.28 |
phpmyadmin에서 시간 초과를 해결하는 방법은 무엇입니까? (0) | 2020.10.28 |