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 객체 를 참조 하려면 ( 메소드 호출 과 반대로 ) 다음과 같이 호출합니다. (그 자체가 전달 된 메서드를 반환하는 메서드입니다. 따라서 Ruby 에서는.) 스몰 토크 문서, 메소드는 일반적으로라고 하지만 Ruby 에서는 . 따라서 선택되었습니다.Array >> #new.
>>
Array.method :new
Class>>method
Class: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 컴파일러는 두 가지 목적을 위해 점을 잘 처리합니다.
'program tip' 카테고리의 다른 글
GitHub에서 문제에 대한 사용자 지정 레이블을 만드는 방법은 무엇입니까? (0) | 2020.12.29 |
---|---|
create-react-app의 npm 시작 오류 (0) | 2020.12.28 |
SQL Server 2008 R2에서 50MB 스크립트를 실행하는 동안 오류 발생 (0) | 2020.12.28 |
자바 멀티 스레딩 개념 및 join () 메서드 (0) | 2020.12.28 |
배열에서 두 번 발생하지 않는 유일한 숫자를 찾는 방법 (0) | 2020.12.28 |