자기를 사용합니다. 아니면 .. Rails에서
지금은 Ruby로 코딩을 해왔지만 언제 사용해야할지 모르겠습니다.
def self.METHOD_NAME
end
또는 그냥 :
def METHOD_NAME
end
모든 Rails 모델에서. "self"는 Java에서 private과 같은 수정 자입니까? 언제 사용하고 사용하지 않습니까?. 엄청 고마워.
def self.method_name
end
클래스 메서드를 정의합니다.
def method_name
end
인스턴스 메서드를 정의합니다.
이것은 그것에 대한 꽤 좋은 게시물입니다.
이것이 의미하는 바에 대한 간략한 설명 :
루비에서는 특정 객체에 대한 메소드를 정의 할 수 있습니다.
a = "hello"
def a.informal
"hi"
end
a.informal
=> "hi"
그렇게 할 때 무슨 일이 일어나는가는 클래스의 a 객체 String
가 "고스트"클래스, 일명 메타 클래스, 싱글 톤 클래스 또는 고유 클래스로 변경되는 것입니다. 새로운 클래스 수퍼 클래스는 String
.
또한 클래스 정의 내에서 정의 self
되는 클래스로 설정되므로
class Greeting
def self.say_hello
"Hello"
end
#is the same as:
def Greeting.informal
"hi"
end
end
무슨 일이 일어나는가는 Greeting
class 의 객체 Class
가 새로운 메소드를 가진 새로운 메타 클래스 를 얻는 것입니다.
Greeting.informal
=> "hi"
루비에는 클래스 메소드와 같은 것이 없지만 의미는 비슷합니다.
어느 것을 사용해야하는지에 대한 좋은 가이드 :
- 메서드가 개체의 내부 상태에 의존하거나 주소를 지정하는 개체의 인스턴스를 알아야하는 경우 클래스 (
self.
) 메서드로 만들지 마십시오 . - 메서드가 객체의 상태에 의존하지 않거나 객체의 특정 인스턴스를 갖는 경우 in은 클래스 메서드가 될 수 있습니다.
클래스 메서드를 만들 때 어떤 클래스 또는 모듈에 속하는지 신중하게 생각하십시오. 클래스간에 클래스 메서드에서 코드를 복제하는 것을 발견 한 경우 다른 클래스가 섞일 수있는 모듈로이를 팩터링하십시오.
이 컨텍스트에서-def self.method_name은 Java 정적 메소드와 동일하게 만듭니다.
루비:
class HexHelper
def self.to_h(num)
sprintf("%x", num)
end
end
use: HexHelper.to_h(12345)
자바:
public class HexHelper
{
public static String toHex(int num)
{
return new PrintfFormat("%x").sprintf(num);
}
}
use: HexHelper.toHex(12345)
self는 항상 현재 객체입니다.
여기에서 자아를 볼 때
def self.method_name end
인스턴스 메소드에 있지 않으므로 self는 현재 Class 객체입니다.
self 는 Java 의 this 키워드 와 같습니다 . 현재 개체 인스턴스에 대한 참조입니다. 모델 코드가 현재 개체에 대해 작업을 수행하는 경우 self.method_name 지정자가없는 함수가 필요할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/386115/to-use-self-or-not-in-rails
'IT TIP' 카테고리의 다른 글
배경색으로 네이티브 테두리 반경 반응 (0) | 2020.10.20 |
---|---|
Bootstrap 4 반응 형 테이블은 너비를 100 % 차지하지 않습니다. (0) | 2020.10.20 |
파이프 라인 입력을 허용하는 PowerShell 스크립트를 작성하려면 어떻게해야합니까? (0) | 2020.10.20 |
MySQL은 전체 열에서 모든 공백을 제거합니다. (0) | 2020.10.20 |
두 시간 사이에 몇 분이 있는지 계산 (0) | 2020.10.20 |