2013-12-12 1 views
0

둘 이상의 인수를 필요로하는 setter 메서드를 정의 할 수 있는지 여부를 묻는 질문이 있지만 가능하지 않은 것 같아요. 인수를 취하지 않는 setter 메서드로 무엇을 할 수 있습니까?

나는 setter 메소드가 하나 개 이상의 인수를 할 수 있다고,하지만 그것에 대해 생각 인수 취하지 않는 것보다 실제로 세터를 정의 할 수 있는지 궁금 :

class Test 
    def self.args= 

    end 
end 

을 그리고 루비, 아마 원인을 그것을 받아 그것을 받아들이려는 이유가 없습니다. 나는 실제로 그것으로 무엇이든을해서 좋은가?

답변

1

설정자로 사용할 수 없으며 일반적인 방법으로는별로 유용하지 않습니다. 이 메서드를 실행하는 유일한 방법은 send을 사용하거나 메서드 인스턴스를 만드는 것입니다. 일반적인 메시지 보내기 구문에서 메시지에 "="문자를 포함 할 수 없기 때문입니다.

그래서 당신은 기술적으로 같은 코드 수 :

class Foo 
    def bar=() 
    puts "Hi, mom!" 
    end 
end 

foo = Foo.new 
foo.send(:bar=) 

를 그리고 인쇄 것 "안녕, 엄마!" 예상대로

하지만 아무 것도 할 수 있습니까? 글쎄, 너는 너의 친구에게 자랑 할 수있을거야. 아무것도 설정하지 않는 너의 평론없는 세터에 대한거야. 그 이상, 아니, 정말 아무것도 유용하지 않습니다.

1

인수없이 수행 할 수있는 다른 모든 인스턴스 메소드가 수행 할 수있는 모든 작업을 수행 할 수 있습니다. = 연산자의 컨텍스트 내에서 호출하면 블록을 전달할 수 있다고 생각하지 않지만 수는send과 함께 블록을 전달할 수 있습니다.

예를 들어, setter 메서드는 보통 인스턴스 메서드로 정의되지만 예제에서는 단일 메서드 클래스에 대한 setter 메서드를 정의합니다.

관련 문제