2012-11-05 2 views
5

루비 1.9.x에 관한 태닝, 나는 어떤 장소에서 그것을 사용하고, 기본적으로 PROC 인수에 기본 매개 변수를 지원하는 것처럼 번역 할 수 있습니다Ruby Reverse Currying : 이것이 가능합니까?

p = proc {|x, y, z|x + y + z} 
p.curry[1] #=> returns a lambda 
p.curry[1, 2] #=> returns a lambda 
p.curry[1, 2, 3] #=> 6 
p2 = p.curry[1, 2] 
p2.(2) #=> 5 
p2.(4) #=> 7 

매우 편리합니다, 맞죠? 문제는, 나는 카세트를 역순으로 할 수 있기를 원한다. 즉, 내 proc의 마지막 인자를 임의의 값으로 채우는 것을 의미한다. 이와 같이 :

p = proc{|x, y| x - y }.curry[1] 
p.(4) 

원하는 결과는 3입니다.이 경우 -3이 반환됩니다.

답변

1

내가 아마 백 무두질 당신이 원하는 결과를 달성하기 위해 무엇을 할 수 있는지

랩이보다 문제에 더 나은 솔루션이, 거기를하는 직접적인 방법이 없다 무엇을 당신이하고있는 것은 조금 사기라고 생각합니다 당신의 발동 주위에 더 발동 : 당신이 인수 당신이 원하는 방식으로 재 배열 할 수 있지만, 사실

p = proc{|x, y| x - y} 
q = proc{|y, x| p[x, y]} 
q.curry[1].(4) 

는, 지저분한 매우 빠르게

+0

HUMM를 얻을 그것을 시도를 줄 것, 충분히 깨끗하게 보이는 날 믿어. 유스 케이스는 메서드에서 기본 인수를 가져 오는 것과 동일한 동작을 특정 위치에 복제하는 것이며 마지막 매개 변수를 역방향에서만 설정할 수 있습니다. 같은 방법을 사용하고 다른 인수에서 다른 값으로 기본 인수를 바꾸기를 원했습니다. – ChuckE

관련 문제