Project

General

Profile

Feature #7939

Alternative curry function creation

Added by drKreso (Kresimir Bojcic) over 7 years ago. Updated almost 3 years ago.

Status:
Feedback
Priority:
Normal
Target version:
-
[ruby-core:52797]

Description

=begin
I really like the new "(({assuming}))" method used for currying in Perl 6.

For example if I loose my mind and implement ((%fizzbuzz%)) via currying I can do it like this:

fb = ->(modulo_number, message, x) { message if x % modulo_number == 0 }
fizzbuzz = fb.curry[15,"FizzBuzz"]
fizz = fb.curry[3, "Fizz"]
buzz = fb.curry5, "Buzz".each { |i| puts fizzbuzz[i] || fizz[i] || buzz[i] || i }

Here the first hurdle is that curry is somewhat mathematical, and the secons is that you need to use (({[]})) for function invoking...
If we had something similar to this:

class Proc
def assuming(*args)
curry.call *args
end
end

It could be written more naturally IMO:

fb = ->(modulo_number, message, x) { message if x % modulo_number == 0 }
fizzbuzz = fb.assuming(15,"FizzBuzz")
buzz = fb.assuming(5, "Buzz")
fizz = fb.assuming(3,"Fizz")

(1..100).each { |i| puts fizzbuzz[i] || fizz[i] || buzz[i] || i }
=end


Related issues

Related to Ruby master - Feature #6817: Partial applicationOpenmatz (Yukihiro Matsumoto)Actions
Related to Ruby master - Feature #13765: Add Proc#bindOpenActions

Also available in: Atom PDF