From: Daishi Harada Date: 2001-05-25T11:50:34+09:00 Subject: [ruby-talk:15689] Re: Q: Function modification/Procedures Thanks for the reply. I have another related question. To make a parametrized function creator, I first tried something like: class Adder < Proc def initialize(n) @n = n end def call(x) x+@n end end This broke since Proc expects a block on initialization, so you can't just do: add2 = Adder.new(2) For a simple function like this I was able to instead do: def mkadder(n); proc {|x| x+n}; end add2 = mkadder(2) However, for more complicated procedures it would be nice to be able to have a real class and methods to encapsulate subprocedures into. I currently have another potential solution as: module Callable def [](x) call(x) end end class Adder include Callable def initialize(n) @n = n end def call(x) x+@n end end But this seems like a bit of a hack; is there a "right" way to do this kind of thing? Thanks again, daishi From: Dave Thomas Subject: Re: [ruby-talk:15633] Q: Function modification/Procedures Date: 23 May 2001 18:49:20 -0500 > You can use '[]' as an alias for call, so something like > > def some_fn(n) > n * 2 > end > > def wrap(&fn) > proc {|x| some_fn(fn[x])} > end > > > add_3_times_2 = wrap {|x| x + 3} > > add_3_times_2[4] #=> 14 > add_3_times_2[-2] #=> 2 > > > I'm not sure if there's a parsing reason that you can't overload '()'. > > > Dave >