2011-11-08 3 views
2

는 최근에 나는 다음과 같습니다 일부 루비 코드를 통해 실행했습니다 : 전에 그 데프 구문을 본 적이 없다컨텍스트가있는 Ruby 메서드 정의 란 무엇입니까?

module SomeModule 
    class SomeClass 
    def hire_an_employee business 
     # do stuff 
    end 
    end 
end 

. 다음과 같이 곡괭이 번호부

는 메소드 정의이다 ". defname 메소드의 이름과가 유효한 선택적 콘텍스트 모두는"

def defname⟨(⟨,arg⟨,=val⟩⟩∗ ⟨,&blockarg⟩) ⟩ 
    body 
end 

을하고한다고 그러나 더 이상의 설명을 제공하지 않는 것 같습니다.

내 질문은 : 누군가이 컨텍스트에서이 메서드 정의에 대해 더 잘 설명 할 수 있고 어떻게 사용할 수 있는지 예를들 수 있습니까?

답변

3

코드 샘플은 module 내에 클래스를 정의합니다. 클래스에는 단일 매개 변수 business을 사용하여 hire_an_employee이라는 단일 메서드가 있습니다. 누락 된 괄호를 언급하지 않는 한 메서드 정의 자체에는 이상한 것이 없습니다.

괄호는 옵션을 정의 할 때 선택 사항이며 (모호성 제거에 필요하지 않은 경우) 하나의 메소드를 호출 할 때 선택 사항입니다.

"컨텍스트"부분은 과 같은 컨텍스트를 포함하여 인스턴스를 반대하는 클래스를 정의 할 수 있음을 의미합니다. 을 감안할 때

class Foo 
    def self.ohai 
    p "kthxbai" 
    end 
end 

> Foo.ohai 
kthxbai 
> Foo.new.ohai 
NoMethodError: undefined method 'ohai' ... 
+0

아, 감사 :

def foo(a) #do stuff end 

는 같은입니다! 나는 괄호가 인수에 대해 선택적이라는 것을 깨닫지 못했습니다. 필자는 비즈니스가 컨텍스트라고 생각하고 그 의미를 파악하려고했습니다. –

+0

저는 Ruby 개발자 중 많은 부분을 알고 있습니다. 여러분이 0보다 큰 인수를 취하는 메소드의 정의에서 괄호를 생략하면 매우 재미있을 것입니다. 구문 론적으로 선택 사항이지만 일반적으로 필수 항목이라고 생각하십시오. :-) – sheldonh

+0

@BrianWong 네, 그게 너를 던지고 있는지 궁금해. 나는 명시 적으로 말 했어야했다. –

0

:

module SomeModule 
    class SomeClass 
    def hire_an_employee business 
     # do stuff 
    end 
end 

함수 'hire_an_employee'

k = SomeModule::SomeClass.new 
k.hire_an_employee "woot" 

시를 사용하려면 : 당신은 괄호를 생략 할 수 있습니다.

def foo a 
    #do stuff 
end 
+0

인자의 수와 관계없이 괄호를 생략 할 수 있습니다. –

+0

데이브 감사합니다. 결정된. –

관련 문제