2015-01-14 4 views
-2

여러 인수를 취하는 메서드를 재정의하는 하위 클래스가있는 기본 클래스가 있습니다.Splat 연산자 및 메서드 재정의

class Parent 
    def foo *bar 
    end 
end 

class Child < Parent 
    def foo bar, baz 
    end 
end 

잘 작동합니다.

def foobar *foo_args 
    foo foo_args 
end 

이것은 Child.new.foo 두 객체를 기대하면서 foo_args는, 하나 개의 배열이기 때문에 자식 인스턴스라는하면 ArgumentError을 제기하지만, foo를 호출 부모의 메소드는 foobar가 가정합니다. 이 문제를 해결할 방법이 있습니까?

+2

이걸 재현 할 수 없습니다. 귀하의 코드는 Ruby 2.1 및 1.8.7에서 잘 작동합니다. 내가 아는 한, 부모와 자녀가 일치해야하는 서명 방법에 대해 잘못되었습니다. Ruby에는 이러한 요구 사항이 없습니다. 이것은 잘 작동합니다 : http://pastebin.com/g5VgzKPX – meagar

+0

정확히 - Ruby에서 이것은 런타임 메시지 디스패치의 문제입니다. – WarHog

+1

당신이하려는 일은 전혀 명확하지 않습니다. – sawa

답변

1

귀하의 질문은 명확하지 않다, 그러나 나는 이것이 당신이 원하는 것 같아요 : 그것이 오류가 발생하지 않도록하기위한

def foobar *foo_args 
    foo(*foo_args) 
end 

하지만 Child.new.foo 정확히 두 개의 인수를 취해야합니다.

+0

예, 그게 전부입니다. 나는 논쟁을 "unsplat"할 필요가있다. 고맙습니다. – brito