2012-11-05 19 views
5

Yakut 1.9.x içinde ilgili imalatı, bazı yerlerde de kullanıyorum, ve temelde proc argümanları varsayılan parametreleri destekleyen gibi tercüme edilebilir:Ruby Reverse Currying: Bu mümkün mü?

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 

çok kullanışlı değil mi? şey şu ki, tersine körlenebilmek isterdim, yani, procumun son argümanını rastgele bir değerle doldur. Bunun gibi:

İstenilen sonuç 3 olacaktır.

cevap

1

i muhtemelen arka currying istediğiniz sonucu elde etmek için neler yapabileceklerini

sarma daha sorununuza daha iyi bir çözüm yoktur, orada bunu yaparken hiçbir şekilde doğrudan ve ne yaptığınızı biraz tehlikeli olduğunu düşünüyorum senin procs etrafında daha procs: Eğer argümanlardır istediğiniz gibi yeniden düzenlemek ancak aslında

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

o dağınık çok hızla

+0

humm alır denemeye olacak, yeterince temiz görünüyor inan bana. Kullanım durumu, yöntemlerde varsayılan argümanlara sahip olmanızla aynı davranışı olan belirli bir yerde çoğaltmaktır ve bunlar yalnızca son argümandan geriye doğru ayarlanabilir. Aynı yöntemi almak ve varsayılan argümanı farklı bir bağlamda farklı bir değerle değiştirmek istedim. – ChuckE