나는 오해를하고 있을지 모르지만 나는이 질문이 의미가없는 것을하려고 시도하고 있다고 생각합니다.
Ruby에서 객체에 메시지를 보내는 것은 객체가 요청 된 메시지에 어떤 방식 으로든 응답하도록 요청하는 것을 의미합니다 (이 경우에는 심볼이 지정됨). 메시지는 우리가 일반적으로 메서드 호출이라고 부르는 것입니다. 이 예제에서 "send"는 객체에 전송 된 메시지이고 "send"메시지를 수신 한 객체는 전달 된 인수 (다른 메소드의 심볼)를 사용하여 해당 객체에 대한 메소드에 해당하는 메시지를 보냅니다. 통과 된 상징.
그래서 객체를 보내지 않는 것은 거의 객체를 보내지 않는 것과 같습니다. 단, 은이 실제로 객체에 메시지를 보냈지 만 내용이없는 객체 만 보냈습니다. 따라서 객체는 필연적으로 수행해야 할 작업에 대해 혼란 스럽습니다. 아무 것도하지 말라는 것이기 때문입니다. 당신은 누군가가 당신이 아무것도하지 않는 요구하는 경우도 혼동하지 않을까요 :)
그래서 특정 질문에 켜 :
귀하의 질문에 (내가 알고있는 여부를 명확하게하는)을 바꿔하려면, 당신이 생각하는 묻습니다 : 체인에있는 호출 중 하나가 변수 (메시지를 보내는 방식으로 호출하는 메서드)가 nil이 아닌 경우에만 발생하는 일련의 호출을 연결할 수 있습니까?
아마도 이것은 일반적인 용도의 솔루션에 더 좋을까요?
def send(method, *args)
super if method
end
는 다른 방법으로이 작업을 수행 할 수 있습니다
obj2 = obj1.obj2
obj2 = obj2.send(val) if val
obj2.obj3.obj4
그렇지 않으면, 실제로 귀하의 질문에 대답 (지금 이해 않지만, 일을 더 복잡하게 만들 수도 있습니다), 당신은 당신의 수업이 넣을 수 있습니다 :
그러면 모든 객체가 전송을 위해 아무 것도받지 않고 (아무 것도하지 않음) 전송하게됩니다.
경고 [원문] 도발 것이 솔루션 :
이
경고 :`를 재정의 당신은 $의 표준 오류 리디렉션하여이 경고를 억제 할 수
심각한 문제를 일으킬 수 있습니다 '를 보낼 수 있지만, 그것의를 threadsafe하지 않습니다 (Matz, 간단한 Google 검색에서 말합니다).
Ruby 2.2부터는'Kernel # itself'을 사용할 수 있으므로 더 이상 패치 할 필요가 없습니다. – Aert