IT박스

def`self.function` 이름은 무엇을 의미합니까?

itboxs 2020. 12. 29. 06:50
반응형

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

반응형