The simple case, is this guy:
> m = SecureRandom.method(:hex)
=> #<Method: SecureRandom.hex>
> m.call
=> "5928aab178404945fb560a249b67a000"
> m.call
=> "d5ba69ac2e9dc8632aee7bf3212f6d67"
But, what I want, is a fully curried function. Something like this:
> m = SecureRandom.method(:hex, 6)
=> #<Method: SecureRandom.hex>
> m.call
=> "bd131d38de3c"
> m.call
=> "4e5a20936be0"
But Object#method
doesn't take more than one argument. So, to get the effect I want, I have to do something like this:
> m = -> { SecureRandom.hex(6) }
=> #<Proc:0x000000034144b8@(pry):7 (lambda)>
> m.call
=> "bd131d38de3c"
> m.call
=> "4e5a20936be0"
It's not a huge thing, just a little sugar, but still.
I guess to be really nice to use with, like, partial argument-list support, you'd have to do some math around arity between the method and the object returned so that the call would only expect as many args as the method had left, or... whatever.