def`self.function` 이름은 무엇을 의미합니까?
누구든지 self
메소드 정의 에 추가 하는 것의 중요성을 설명 할 수 있습니까 ? this
자바의 키워드 와 비슷 합니까?
다른 언어와 달리 Ruby에는 클래스 메서드가 없지만 특정 개체에 연결된 단일 메서드가 있습니다.
cat = String.new("cat")
def cat.speak
'miaow'
end
cat.speak #=> "miaow"
cat.singleton_methods #=> ["speak"]
def cat.speak
개체 cat에 연결된 단일 메서드를 만들었습니다.
작성하면 다음 class A
과 동일합니다 A = Class.new
.
A = Class.new
def A.speak
"I'm class A"
end
A.speak #=> "I'm class A"
A.singleton_methods #=> ["speak"]
def A.speak
객체 A에 첨부 된 싱글 톤 메소드를 생성했습니다.이를 클래스 A의 클래스 메소드라고 부르는 데 사용합니다.
당신이 쓸 때
class A
def self.c_method
'in A#c_method'
end
end
Class (*)의 인스턴스를 만듭니다. 클래스 정의 내에서 Ruby는 self를 상수 A에 할당 된이 새로운 Class 인스턴스로 설정합니다. 따라서 , 즉 현재 클래스 A 인 객체 self에 연결된 싱글 톤 메서드를 정의하는 def self.c_method
것과 같습니다 def cat.speak
. .
이제 클래스 A에는 일반적으로 클래스 메서드라고하는 두 개의 단일 메서드가 있습니다.
A.singleton_methods
=> ["c_method", "speak"]
(*) 기술적으로 A = Class.new에 의해 A가 이미 생성 된이 경우 class A
기존 클래스를 다시 엽니 다 . 이것이 우리가 마지막에 두 개의 싱글 톤 방법을 갖는 이유입니다. 그러나 클래스의 첫 번째 정의 인 일반적인 경우에는 Class.new를 의미합니다.
루비에서 self는 this
자바에서 와 다소 유사 하지만 클래스에 관해서 static
는 자바 의 키워드와 더 비슷합니다 . 간단한 예 :
class A
# class method
def self.c_method
true
end
# instance method
def i_method
true
end
end
A.c_method #=> true
A.i_method #=> failure
A.new.i_method #=> true
A.new.c_method #=> failure
업데이트 : 자바의 정적 메소드와 Ruby의 클래스 메소드의 차이점
Java의 정적 메소드에는 인스턴스 메소드와 다른 두 가지 기능이 있습니다. a) 정적 메소드 b) 인스턴스와 연관되지 않습니다. (IOW : 실제로는 메서드와는 전혀 다르며 프로 시저 일뿐입니다.) Ruby에서 모든 메서드는 동적이며 모든 메서드는 인스턴스와 연결됩니다. 사실, 세 가지 다른 종류의 "메서드"(인스턴스 메서드, 정적 메서드 및 생성자)가있는 Java와 달리 Ruby에는 인스턴스 메서드라는 한 종류의 메서드 만 있습니다. 따라서 아니오 : Java의 정적 메서드는 Ruby의 메서드와 완전히 다릅니다. – Jörg W Mittag 1 시간 전
When declaring a method, the self
of the declaration is the declaring class/module, so effectively you are defining a class method. For the client, this works similar to a static
method in java. The client would call the method on the class instead of an instance: MyClass.method
Here you can find some more details on class and instance methods.
EDIT: While the self
keyword is akin to the this
keyword in java, the effects of using self
for class method declaration are similar to the effect of using the static
keyword in java. The similarity is that static methods in java, like class methods in ruby are accessed using the class object iself instead of an instance of the class.
Please note that static
does not stand for the opposite of dynamic. The choice of the name for this keyword is questionable (probably inherited from C) and rather should have been called perClass
or similar to better reflect the meaning. The technical meaning is that all static
members exist only once for each classloader.
ReferenceURL : https://stackoverflow.com/questions/13706373/what-does-def-self-function-name-mean
'IT박스' 카테고리의 다른 글
std :: string을 std :: vector에 복사하는 방법 (0) | 2020.12.29 |
---|---|
Jekyll과 함께 Live Reload 사용 (0) | 2020.12.29 |
armeabi는 무엇이며 왜 사용합니까? (0) | 2020.12.29 |
여러 공간을 단일 공간으로 병합합니다. (0) | 2020.12.29 |
플래그가있는 Python re.sub가 모든 발생을 대체하지는 않습니다. (0) | 2020.12.29 |