From: Joshua Ballanco Date: 2012-07-10T05:12:24+09:00 Subject: [ruby-core:46283] Re: Lambdaification of Method Calls --4ffb3b1d_66334873_a614 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline It seems to me that this is a bit like a combination of Proc#curry and a promise/future object. In fact, your second example can exactly be done with Proc#curry: 1.9.3-p194 :001 > s = "foo" => "foo" 1.9.3-p194 :002 > l = s.method(:"+").to_proc.curry => # 1.9.3-p194 :003 > l["end"] => "fooend" 1.9.3-p194 :004 > s => "foo" On Monday, July 9, 2012 at 6:05 PM, Robert Klemme wrote: > Hi, > > does anybody think this is a good idea to have in stdlib or even core? > > class Object > def to_lambda(method, *a) > lambda {|*b| send(method, *a, *b)} > end > end > > With that we can do > > irb(main):015:0> l = s.to_lambda(:<<, "") > => # > irb(main):016:0> l.call > => "foo" > irb(main):017:0> s > => "foo" > irb(main):018:0> l[] > => "foo" > irb(main):019:0> s > => "foo" > > irb(main):038:0> s = "foo" > => "foo" > irb(main):039:0> l = s.to_lambda '+' > => # > irb(main):040:0> l["end"] > => "fooend" > irb(main):041:0> s > => "foo" > > It would be a convenient way to bundle a method call with arguments > for later execution (e.g. through a thread pool). You then just do > > queue.enq my_object.to_lambda(:calculate, "foo", 123) > > and be done. Another convenient name for the method would be "later". > So we get > > queue.enq my_object.later(:calculate, "foo", 123) > > We could drive that even further and do > > class Proc # or maybe class Object? > def in(queue) > queue << self > end > end > > No we can do > > my_object.later(:calculate, "foo", 123).in queue > > Thoughts? > > Kind regards > > robert > > -- > remember.guy do |as, often| as.you_can - without end > http://blog.rubybestpractices.com/ > > --4ffb3b1d_66334873_a614 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline
It seems to me that this is a bit like a combination of Proc=23curry = and a promise/future object. In fact, your second example can exactly be = done with Proc=23curry:

1.9.3-p194 :001 > s =3D= =22foo=22
 =3D> =22foo=22 
1.9.3-p194 := 002 > l =3D s.method(:=22+=22).to=5Fproc.curry
 =3D>= =23<Proc:0x007ffc83103c40 (lambda)> 
1.9.3-p194 :00= 3 > l=5B=22end=22=5D
 =3D> =22fooend=22 
<= div>1.9.3-p194 :004 > s
 =3D> =22foo=22 
<= /div>
=20

On Monday, July 9, 201= 2 at 6:05 PM, Robert Klemme wrote:

Hi,

doe= s anybody think this is a good idea to have in stdlib or even core=3F

class Object
def to=5Flambda(method, *a= )
lambda =7B=7C*b=7C send(method, *a, *b)=7D
en= d
end

With that we can do
irb(main):015:0> l =3D s.to=5Flambda(:<<, =22<X&= gt;=22)
=3D> =23<Proc:0x802c4298=40(irb):12 (lambda)><= /div>
irb(main):016:0> l.call
=3D> =22foo<X>=22=
irb(main):017:0> s
=3D> =22foo<X>=22
irb(main):018:0> l=5B=5D
=3D> =22foo<X><X= >=22
irb(main):019:0> s
=3D> =22foo<X>= <X>=22

irb(main):038:0> s =3D =22foo=22=
=3D> =22foo=22
irb(main):039:0> l =3D s.to=5Fl= ambda '+'
=3D> =23<Proc:0x801e8d60=40(irb):22 (lambda)>= ;
irb(main):040:0> l=5B=22end=22=5D
=3D> =22foo= end=22
irb(main):041:0> s
=3D> =22foo=22
<= div>
It would be a convenient way to bundle a method call w= ith arguments
for later execution (e.g. through a thread pool).= You then just do

queue.enq my=5Fobject.to=5Fla= mbda(:calculate, =22foo=22, 123)

and be done. A= nother convenient name for the method would be =22later=22.
So= we get

queue.enq my=5Fobject.later(:calculate, = =22foo=22, 123)

We could drive that even further= and do

class Proc =23 or maybe class Object=3F<= /div>
def in(queue)
queue << self
e= nd
end

No we can do

my=5Fobject.later(:calculate, =22foo=22, 123).in queue
<= br>
Thoughts=3F

Kind regards

robert

--
remember.gu= y do =7Cas, often=7C as.you=5Fcan - without end
=20 =20 =20 =20
=20

--4ffb3b1d_66334873_a614--