Some things are unclear to me about Method#to_proc. I understand the
following:
plus = 12.method("+")
p plus.call(13) # prints 25
newplus = plus.unbind.bind(20)
p newplus.call(13) # prints 33
Although the usefulness of this eludes me
However, this:
plus_proc = plus.to_proc
p plus_proc.call(10) # prints 10
Is unclear…
How does it work ?
What does it mean for a Proc to be bound to an object ?
Can someone provide an example where it is useful ?
Have the ‘bind’ and ‘unbind’ methods of Method / UnboundMethod
anything in common with Proc#binding or the Binding class ?
Have Proc#binding and the Binding class anything in common ? How
about Kernel#binding ?
Additionally, the following, IMHO demostrates a very surprising and
unnatural behavior of to_proc:
def foo(arr)
puts “Got an array with #{arr.length} elements”
end
works correctly
foo([4, 5, 6])
foo_proc = method(:foo).to_proc
throws an ArgumentError: 3 for 1
foo_proc.call([4, 5, 6])
works correctly
foo_proc.call([[4, 5, 6]])
The Proc created by to_proc is obviously different from the original
method, since it “folds” its arguments into an array. I guess there
will be even more problems when the method receives more than one array
as an argument.
How should this be handled correctly ?
In message “Re: understanding the behavior of Method#to_proc”
on Thu, 20 Apr 2006 02:19:41 +0900, Eli B. [email protected]
writes:
|Still, I don’t quite understand what does it mean for a Proc to be bound
|to an object ? Does it have some access to the object’s internals, like
|the method did ? When is this useful ?
Still I don’t quite understand what you expect for a Proc not to be
bound to an object in this case. It was only reasonable design for
me.
In message “Re: understanding the behavior of Method#to_proc”
on Thu, 20 Apr 2006 02:19:41 +0900, Eli B. [email protected]
writes:
|Still, I don’t quite understand what does it mean for a Proc to be bound
|to an object ? Does it have some access to the object’s internals, like
|the method did ? When is this useful ?
Still I don’t quite understand what you expect for a Proc not to be
bound to an object in this case. It was only reasonable design for
me.
matz.
Matz,
I’m not questioning your design at all - I ask out of sheer curiosity
what this language construct (Proc bound to an object) does, because it
isn’t documented anywhere (please correct me if I’m mistaken). Moreover,
I’ll be happy to see an example of when this can be useful in Ruby
coding.
In message “Re: understanding the behavior of Method#to_proc”
on Wed, 19 Apr 2006 23:25:34 +0900, Eli B. [email protected]
writes:
|plus = 12.method(“+”)
|p plus.call(13) # prints 25
|plus_proc = plus.to_proc
|p plus_proc.call(10) # prints 10
Which version of Ruby are you using? My 1.8.4 gives me 22.
matz.
You are right, I made a mistake. It prints 22 for me too.
Still, I don’t quite understand what does it mean for a Proc to be bound
to an object ? Does it have some access to the object’s internals, like
the method did ? When is this useful ?
E> I’m not questioning your design at all - I ask out of sheer curiosity
E> what this language construct (Proc bound to an object) does, because
it
E> isn’t documented anywhere (please correct me if I’m mistaken).
Moreover,
E> I’ll be happy to see an example of when this can be useful in Ruby
E> coding.
Well, I’ve not understood but if you want to know why Method#to_proc
exist
this is perhaps to give you this possibility