Ruby의 단일 메소드 및 단일 클래스 상세 정보
Ruby는 단일 객체에만 적용되는 단일 객체 추가 방법을 단일 방법이라고 합니다.
예제 코드
str = “just a regular string”
def str.title?
self.upcase == self
end
str.title? # => false
str.methods.grep(/title?/) # => [:title?]
str.singleton_methods #=> [:title?]
str.class # => String
String.title? #=> NoMethodError
또한 위에서 사용한 정의 방법 외에 Object#define_를 통해singleton_method 방법으로 단일 방법 정의단일 방법과 유형 방법
앞의 노트에는 루비에서 클래스도 대상이고 클래스 이름은 상량이기 때문에 클래스에서 호출하는 방법은 사실 대상에서 호출하는 방법과 같다고 나와 있다.
유형 방법의 실질은 하나의 유형의 단일 방법이다. 실제로 단일 방법의 정의와 유형 방법의 정의를 비교하면 사실 양자가 같다는 것을 발견할 수 있다.
def obj.a_singleton_method; end
def MyClass.another_class_method; end
둘 다 def 키워드로 정의를 했어요.
def object.method
#
end
위의object는 * 대상의 인용, 상량 클래스 이름 또는self일 수 있습니다.클래스 매크로attr_accessor
Ruby 대상은 속성이 없습니다. 만약 속성과 같은 것을 얻으려면 각각 읽는 방법과 쓰는 방법(즉 자바,objc의 set와 get 방법)을 정의해야 합니다. 가장 직접적인 것은 다음과 같습니다.
예제 코드
class MyClass
def my_attribute=(value)
@my_attribute =value
end
def my_attribute
@my_attribute
end
end
obj = MyClass.new
obj.my_attribute = ‘x'
obj.my_attribute #=> ‘x'
그러나 위의 이런 작법은 속성이 많으면 Repeat Yourself가 존재하는데 이때 다음 세 가지 유형의 매크로를 사용할 수 있다.
class MyClass
attr_accessor :my_attribue
end
이렇게 하면 훨씬 간결하지 않을까요?물론 사용 방법(읽기와 쓰기)은 위의 실현과 일치한다.단품류
우리는 루비에서 대상을 찾는 방법의 순서를 알고 있다. 먼저 오른쪽으로, 다시 위로 올라가면 그 의미는 먼저 오른쪽으로 대상을 찾는 클래스이고, 먼저 클래스의 실례 방법에서 찾으려고 시도하고, 만약 찾지 못하면 조상의 체인을 따라 계속 찾는 것이다.
앞편에서 하나의 방법을 소개한 적이 있다. 하나의 방법은 특정한 대상만을 대상으로 효과적인 방법을 가리킨다. 만약에 하나의 대상을 위해 하나의 방법을 정의한다면 이 하나의 방법의 검색 순서는 어떻게 해야 하는가?
class MyClass
def my_method; end
end
obj = MyClass.new
def obj.my_singleton_method; end
우선, 하나의 방법은 obj에 있지 않습니다. 왜냐하면obj는 하나의 종류가 아니기 때문입니다. 그 다음은 MyClass에 있지 않습니다. 그러면 모든 MyClass는 이 방법을 공유하고 호출할 수 있고 하나의 종류로 구성할 수 없습니다.같은 이치로 한 가지 방법도 조상 체인의 어느 위치(superclass: Object 유사)에 있을 수 없다.정확한 위치는 단일 클래스입니다. 이 클래스는 사실irb에서 대상에게 클래스를 물었을 때 (obj.class) 얻은 클래스입니다. 다른 것은 일반적인 클래스와 약간 다른 클래스입니다.원류 또는 본징류라고도 할 수 있다.단일 클래스 열기
Ruby는 두 가지 방법으로 단일 클래스의 인용을 얻었다. 하나는 전통적인 키워드 class를 통해 특수한 문법을 결합하는 것이다
법일
class << an_object
#
end
obj = Object.new
singleton_class = class << obj
self
end
singleton_class.class # => Class
또 다른 방법은 Object#singleton_을 통해class 방법으로 단일 클래스의 참조를 얻을 수 있습니다.법2
“abc”.singleton_class # => #<Class: #<String:0xxxxxx>>
단품류의 특성
아래의 이 코드를 통해 스스로 검증할 수 있다
class C
def a_method
‘C#a_method()'
end
end
class D < C; end
obj = D.new
단일 클래스 열기 정의 단일 방법
class << obj
def a_singleton_method
‘obj#a_singleton_method()'
end
end
obj.singleton_class.superclass #=> D
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ruby의 단일 메소드 및 단일 클래스 상세 정보단일 방법 Ruby는 단일 객체에만 적용되는 단일 객체 추가 방법을 단일 방법이라고 합니다. 또한 위에서 사용한 정의 방법 외에 Object#define_를 통해singleton_method 방법으로 단일 방법 정의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.