2012-06-13 8 views
3

이것은 매우 기본적인 루비 질문입니다. ClassName#messageClassName.message의 차이점은 무엇입니까?"Class # message"와 "Class.message"표기법의 차이점

저는 기본적인 Ruby 가이드를 읽고 있는데 두 참조 모두 상당히 많이 사용되는 것을 볼 수 있습니다. 주로 코드 ClassName.message이 사용되지만 설명서에는 ClassName#message이 사용됩니다.

#은 단순히 문서 규칙입니까? . 만 실제 코드로 전달되는 메시지에 사용할 수 있습니까? 아니면 제가 놓친 뭔가가 있습니까?

레일스에서 ​​의미가 다른가요?

답변

13

코드에서 object.method을 사용합니다. 그러나 문서에서 Class#method은 인스턴스 메소드 (예 : String#upcase)를 나타내지 만 Class.method 또는 Class::method은 클래스/모듈 메소드 (예 : Math.log10)를 나타냅니다.

+0

간결하고 명확한 대답에 감사드립니다. – KayoticSully

+1

도와 드리겠습니다. 여러분이 여기 새로 왔기 때문에 한 번 더 조언을드립니다 : StackOverflow 에티켓으로 downvote 버튼 아래의 작은 눈금으로 가장 유용한 답을 받아 들일 수 있습니다. –

+0

걱정 마세요, 알아요. 스택은 내가 당신의 대답을 받아 들일 때 몇 분 더 대답을 선택할 수 없었습니다. – KayoticSully

4

#은 문서에서 클래스 메서드와 인스턴스 메서드의 차이점을 지적하는 데 사용됩니다.

코드에서 모든 경우에 .이 사용됩니다.

+0

레일즈는 어떨까요? 만약 내 기억이 나에게 도움이된다면 많은 컨트롤러에서 그 효과 라인에'보기 # 페이지 '나 뭔가가 있다는 것을 기억한다. 어떻게 작동합니까? – KayoticSully

+3

이 구문은 Rails와 라우트 파일에만 적용됩니다. 루비 코드가 아닙니다. –

+0

라우트 파일의 구문 ('controller # action')을 참조하십시오. –

-1

'#'은 레일 규칙입니다. rails className # Message는 className 컨트롤러의 Message 액션에 매핑됩니다.

Ex: 
    match "profile" => "users#show" 

이렇게하면 root_path/profile => UserController의 메소드 (또는 동작)를 표시합니다.

+1

아니요, Rails 규칙이 아닙니다. Rails가 라우팅 할 메소드에 사용하는 루비 규칙입니다. –

+0

저는 RoR 배경에서 왔기 때문에 저는 레일스 컨벤션이라고 생각했습니다. 교육에 대한 감사합니다 @AndrewMarshall .. – Sriharsha

+0

@MichaelPapile 결코 인스턴스 변수를 나타내지 않습니다. 두 경우 모두 인스턴스 메소드를 나타내는 데 사용됩니다. –