Ruby 문서의 메소드 앞에 해시 기호가있는 이유는 무엇입니까?
이것은 한동안 나를 괴롭히는 것입니다. 텍스트로 인쇄 된 Ruby 메서드를 보면 일반적으로 다음과 같이 나타납니다.
Class#method
또는
#method
이제 다음을 사용합니다.
Class.method
모든 Ruby 메소드 앞에 파운드 기호가있는 이유는 무엇입니까? 이유가 있습니까? 그냥 궁금해.
로부터 rdoc 워드 프로세서 :
클래스 이름, 소스 파일 및 밑줄을 포함하거나 앞에 해시 문자 가 있는 모든 메서드 이름 은 주석 텍스트에서 설명으로 자동으로 하이퍼 링크됩니다.
(강조 추가.)
규칙은 다음과 같습니다.
Class#method
보다는
object#method
코드에서, 당신은 할 object.method
경우, object
인스턴스이었다 class
. 이 #
규칙은 코드에서 사용되지 않습니다.
에서 RDoc 문서 :
클래스 메서드를 설명하려면 ::를 사용하고 인스턴스 메서드를 설명하려면 #을 사용하고. 예를 들어 코드.
# 표기법은와 instance
같은 표준 방법 을 참조하는 데 사용됩니다 String#upcase
. . 표기법은와 같은 특정 인스턴스의 메서드를 참조하는 데 사용됩니다 mystring.upcase
. 클래스 메소드 'upcase'가 존재한다는 것을 의미하지 않도록 구별됩니다.
나는 다른 대답이 질문의 가장 사소한 측면을 건드리지 않는다는 것을 깨달았습니다 #
.
두 가지 이론이 있습니다.
- Ruby 에서처럼 기호가
#sym
(대신:sym
) 쓰여지는 Smalltalk에서 올 수 있습니다 . 당신이 원하는 경우에 따라서, 참조 하는 Method에 객체 (반대로 호출 하는 방법을), 당신은 뭔가를 부를 것이다Array >> #new.
((가)>>
반환 방법에 전달하는 방법 자체입니다. 그래서이 루비에있을 것이라고Array.method :new
.)에서 스몰 토크 문서, 메소드는 일반적으로라고Class>>method
하지만 RubyClass:method
에서는Class::method
. 따라서Class#method
선택되었습니다. - 내 다른 이론은
#
Ruby의 주석 문자 이기 때문에 단순히 선택되었다는 것 입니다.
확실한 답은 그 관습을 발명 한 사람에 의해서만 주어질 수 있습니다. 루비 프로그래밍 책을 위해 발명 되었다면 데이브 토마스 나 앤디 헌트가 될 것입니다.하지만 저는 의심 스럽습니다. 이 책은 2001 년에 나왔고 루비는 1993 년에 시작되었는데 그 전에는 어떻게 메소드를 언급 했습니까?
위의 모든 답변이 정확합니다. 제가 추가하고 싶은 것은 당신이 말한 문서 스타일이
Class.method
클래스 메소드와 쉽게 혼동됩니다. 위의 구문을 사용하여 루비에서 클래스 메서드를 호출 할 수 있기 때문에 :
class Foo
def self.say_hi
puts "hi"
end
end
Foo.say_hi # => prints "hi"
이것은 이 질문 의 JS 버전 에서 언급 되었지만,이 명명법 은 해시 마크가 페이지 참조로 직접 번역 되는 JavaDoc 에서 온 것 같습니다.href="Component.html#getComponentAt(int, int)"
Ruby가 JavaDoc의 예를 따랐다는 heff의 대답 (평판이 부족해서 언급 할 수 없음)은 내 생각에 가장 좋은 추측입니다. JavaDoc 설계자는 패키지 한정자 (점을 사용)와 클래스 한정자 (해시를 사용)를 구별하는 방법을 필요로하거나 원했습니다. JavaDoc의 @see 및 @link 태그 구문은 다음과 같습니다.
@see package.class#member [optional label]
{@link package.class#member [optional label]}
@see 태그 의 JavaDoc package.class 변형 문서와 heff가 이미 지적한 JavaDoc의 @link 태그 문서를 참조하십시오 .
JavaDoc에서 패키지 이름은 종종 생략 될 수 있으므로 Java 코드는 Ruby와 마찬가지로 Class.member 구문을 사용하기 때문에 Ruby에서와 마찬가지로 이상하게 보이는 Class # member 부분 만 남습니다.
JavaDoc 디자이너가 다른 구문을 필요로하는 이유를 알아내는 것은 흥미로울 것입니다. 반면 Java 컴파일러는 두 가지 목적을 위해 점을 잘 처리합니다.
'your programing' 카테고리의 다른 글
create-react-app의 npm 시작 오류 (0) | 2020.12.26 |
---|---|
create-react-app의 npm 시작 오류 (0) | 2020.12.26 |
SQL Server 2008 R2에서 50MB 스크립트를 실행하는 동안 오류 발생 (0) | 2020.12.26 |
자바 멀티 스레딩 개념 및 join () 메서드 (0) | 2020.12.26 |
배열에서 두 번 발생하지 않는 유일한 숫자를 찾는 방법 (0) | 2020.12.26 |