2012-03-20 2 views
4

루비에서 metaprogramming을하고 있는데 method_missing 구현에서 전화 사이트가 할당에 사용되는지 알 수 있습니까? 예를 들어메소드가 루비에서 어떤 것을 반환해야하는지 알 수 있습니까?

:

x = special_function 'param' 

는 method_missing 구현에 의해 잡힐 것입니다. 함수가 다음과 같이 호출되었는지 확인할 수 있는지 알고 싶습니다.

special_function 'param' 

즉. 과제에 왼손잡이가 없다.

코드에서 위의 두 예제의 차이를 알 수 있습니까? 모든 방법은 항상 뭔가을 반환하는 방법을 평가하기가 호출되는 상황에 독립적이기 때문에이를 생각하지 않을

답변

4

이 가능하다.

이 경우에는 지정이 우발적이며 메서드가 반환하는 것을 사용합니다.

이러한 전화를 구분할 이유가 있습니까? 어쩌면 다른 방법을 사용하여 동일한 문제를 볼 수 있습니다 귀하의 방법을 명명 규칙을 따를 수 있도록 그들의 용도를 분리합니다.

+0

일을 나는 완전히이 답변에 동의와 특히 "같은 문제를 볼 수있는 다른 방법"의 존재 – galymzhan

+0

그게 고마워요. 호출을 구별하고자하는 이유는 반환 값이 예상되는 경우 동적으로 만드는 메서드가 추가 작업을 수행해야한다는 것입니다. 메시지 버스에 동적으로 배치하고 메시지 버스에 호출 중 일부는 '화재 및 잊어 버림'이고 일부는 '요청 응답'입니다. – LenW

+0

메소드에 관해서 일반적으로 볼 수있는 방법은 다음과 같습니다. 그것은 다른 경우에 다르게 행동합니다. 어쩌면 다른 방법이어야합니다. 이것이 옵션이 아닌 경우 기본값을 가진 매개 변수가 문제를 해결할 수 있습니다. – Nikhil

1

본인이 알고있는대로 여기에 귀하의 사례에 대한 차이점이 없습니다.

루비는 오른쪽에서 왼쪽으로 코드를 호출합니다.

special_function 'param' 

을 그리고 그것은 x에 결과를 asign 있습니다 :

그래서 먼저 실행하려고합니다. special_function 방법은 method missing에 던질 것이며, 어떻게 든 그것을 처리 할 경우 일부 vaue을 다시 돌아갑니다 정의되지 않은 그래서 경우

. 나는 당신의 질문을 잘못 이해하는 것 같은 대답이 보이는 ne0lithic_coder 내가 @를 읽을 때 그리고 x는 PS

이 실제 값에 할당됩니다. 당신이 항목을 볼 수 있습니다 Can Ruby return nothing?

PPS 당신이 경우에 x을 할당하고 싶지 않은 경우 당신은 시도 할 수 있습니다 :

val = special_function 'param' 
x = val unless val.nil? # if val 
관련 문제