2012-08-25 3 views
3

메서드를 동적으로 추가하고 여러 매개 변수를 허용 할 수있는 클래스를 만들고 싶습니다. 예를 들어define_singleton_method에 여러 매개 변수를 전달하는 방법

:

def learn_maneuvering(name, &block) 
    define_singleton_method(name) do |*args| 
     # to do 
    end 
end 
: 다음 시작

def learn_maneuvering(name, &block) 
    define_singleton_method(name, &block) 
end 

그러나, 그것은 하나 개의 매개 변수를 차지하고 .. :

r = Robot.new 
r.learn_maneuvering('turn') { |degree| puts "turning #{degree} degrees" } 
r.turn 50 # => turning 50 degrees 
r.turn 50, 60 # => turning 50 degrees # => turning 60 degrees 

내 첫 번째 시도는이했다

저는 믿습니다. 이것은 모든 인수가 올바르게 사용될 때까지 반복됩니다. 아무도, 나는 주어진 블록에 이러한 인수를 전달하는 방법을 잘 모르겠습니다.

def learn_maneuvering(name, &block) 
    define_singleton_method(name) do |*args| 
    args.each do |arg| 
     block.call(arg) 
    end 
    end 
end 

r = Robot.new 
r.learn_maneuvering('turn') { |degree| puts "turning #{degree} degrees" } 

r.turn 50, 60 

인쇄 :

답변

6

당신이 가까이있어

이 60도

을 돌려 50도
를 돌려 그러나 이것은 당신이 원하는 정말? 그냥하는 것처럼 보입니다.

r.turn 50 
r.turn 60 

이 나에게 더 적합합니다.

+0

쿨! 예, 제가 원했던 것은 대단히 감사합니다! Ruby 1.9.3 API에서 블록의 메소드와 메소드의 매개 변수를 확인하려면 어떻게해야합니까? 나는 웹 사이트를 안다. 그러나 나는 단지 키워드 블록을 찾 느냐? – Markymark

+0

블록은 특정 처리가있는 [Proc] (http://ruby-doc.org/core-1.9.3/Proc.html)입니다. 또한'block'은 키워드가 아니기 때문에'& fooblock'을 쉽게 할 수 있습니다. –

관련 문제