your programing

Ruby 문서의 메소드 앞에 해시 기호가있는 이유는 무엇입니까?

lovepro 2020. 12. 26. 16:18
반응형

Ruby 문서의 메소드 앞에 해시 기호가있는 이유는 무엇입니까?


이것은 한동안 나를 괴롭히는 것입니다. 텍스트로 인쇄 된 Ruby 메서드를 보면 일반적으로 다음과 같이 나타납니다.

Class#method

또는

#method

이제 다음을 사용합니다.

Class.method

모든 Ruby 메소드 앞에 파운드 기호가있는 이유는 무엇입니까? 이유가 있습니까? 그냥 궁금해.


로부터 rdoc 워드 프로세서 :

클래스 이름, 소스 파일 및 밑줄을 포함하거나 앞에 해시 문자있는 모든 메서드 이름 은 주석 텍스트에서 설명으로 자동으로 하이퍼 링크됩니다.

(강조 추가.)


규칙은 다음과 같습니다.

Class#method

보다는

object#method

코드에서, 당신은 할 object.method경우, object인스턴스이었다 class. #규칙은 코드에서 사용되지 않습니다.

에서 RDoc 문서 :

클래스 메서드를 설명하려면 ::를 사용하고 인스턴스 메서드를 설명하려면 #을 사용하고. 예를 들어 코드.


# 표기법은와 instance같은 표준 방법 을 참조하는 데 사용됩니다 String#upcase. . 표기법은와 같은 특정 인스턴스의 메서드를 참조하는 데 사용됩니다 mystring.upcase. 클래스 메소드 'upcase'가 존재한다는 것을 의미하지 않도록 구별됩니다.


나는 다른 대답이 질문의 가장 사소한 측면을 건드리지 않는다는 것을 깨달았습니다 #.

두 가지 이론이 있습니다.

  1. Ruby 에서처럼 기호가 #sym(대신 :sym) 쓰여지는 Smalltalk에서 올 수 있습니다 . 당신이 원하는 경우에 따라서, 참조 하는 Method에 객체 (반대로 호출 하는 방법을), 당신은 뭔가를 부를 것이다 Array >> #new.((가) >>반환 방법에 전달하는 방법 자체입니다. 그래서이 루비에있을 것이라고 Array.method :new.)에서 스몰 토크 문서, 메소드는 일반적으로라고 Class>>method하지만 Ruby Class:method에서는 Class::method. 따라서 Class#method선택되었습니다.
  2. 내 다른 이론은 #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 컴파일러는 두 가지 목적을 위해 점을 잘 처리합니다.

참조 URL : https://stackoverflow.com/questions/736120/why-are-methods-in-ruby-documentation-preceded-by-a-hash-sign

반응형