I am not having much luck in finding out how to get the calling object
of a method.
Is there an implicit way that a method can get a pointer to the object
that called it, or do I have to write that explicitly, manually
including a 'sender' parameter for the method call myself?
I have looked at 'caller' but can only coax a string out of it.
Depends on what you want to do. If it's for debugging purposes you
can use set_trace_func to keep track of callers or just trace the
whole program execution.
If you need it for your program logic then you should pass the caller
- either as method parameter or set it as an attribute before the
call. Depends on what you do which is more appropriate.
Kind regards
robert
···
2007/8/3, Peter Laurens <peterlaurenspublic@gmail.com>:
Hi,
I am not having much luck in finding out how to get the calling object
of a method.
Is there an implicit way that a method can get a pointer to the object
that called it, or do I have to write that explicitly, manually
including a 'sender' parameter for the method call myself?
I have looked at 'caller' but can only coax a string out of it.
Hmm maybe binding_of_caller might help, as far as I know Facet
implements it, and Why did so too, maybe just google it, I would not
know which one to recommend.
HTH
Robert
···
On 8/3/07, Peter Laurens <peterlaurenspublic@gmail.com> wrote:
Hi,
I am not having much luck in finding out how to get the calling object
of a method.
Is there an implicit way that a method can get a pointer to the object
that called it, or do I have to write that explicitly, manually
including a 'sender' parameter for the method call myself?
I have looked at 'caller' but can only coax a string out of it.
I am not having much luck in finding out how to get the calling object
of a method.
I'm not sure to understand what you mean, because inside a method
"meth", which is used/called by an object "obj" by "obj.meth", the
object can be referenced by "self".
I am not having much luck in finding out how to get the calling object
of a method.
Is there an implicit way that a method can get a pointer to the object
that called it, or do I have to write that explicitly, manually
including a 'sender' parameter for the method call myself?
I have looked at 'caller' but can only coax a string out of it.
You can always take a block and get the binding from it:
def method(&b)
callers_binding = b.send(:binding)
end
I works always. Yes, it means passing a block, but sometimes that's
useful anyway.
T.
···
On Aug 3, 9:59 am, "ara.t.howard" <ara.t.how...@gmail.com> wrote:
On Aug 3, 2007, at 7:19 AM, Peter Laurens wrote:
> Hi,
> I am not having much luck in finding out how to get the calling object
> of a method.
> Is there an implicit way that a method can get a pointer to the object
> that called it, or do I have to write that explicitly, manually
> including a 'sender' parameter for the method call myself?
> I have looked at 'caller' but can only coax a string out of it.
IIRC, binding of caller hasn't worked since 1.8.4. It relied on a bug
that was fixed.
Ben
···
On Fri, Aug 03, 2007, Robert Dober wrote:
Hmm maybe binding_of_caller might help, as far as I know Facet
implements it, and Why did so too, maybe just google it, I would not
know which one to recommend.
My mistake, I was thinking of Binding#of_caller, which was a different
thing, heh.
Ben
···
On Sat, Aug 04, 2007, Ben Bleything wrote:
On Fri, Aug 03, 2007, Robert Dober wrote:
> Hmm maybe binding_of_caller might help, as far as I know Facet
> implements it, and Why did so too, maybe just google it, I would not
> know which one to recommend.
IIRC, binding of caller hasn't worked since 1.8.4. It relied on a bug
that was fixed.
one could consider it cheating, but it is incredibly useful, I did not
know about it.
Thx and Cheers
Robert
···
On 8/3/07, ara.t.howard <ara.t.howard@gmail.com> wrote:
On Aug 3, 2007, at 11:50 AM, Trans wrote:
> You can always take a block and get the binding from it:
>
> def method(&b)
> callers_binding = b.send(:binding)
> end
>
> I works always. Yes, it means passing a block, but sometimes that's
> useful anyway.
>
??
cfp:~ > cat a.rb
def a &b
eval 'self', b.send(:binding)
end
require 'binding_of_caller'
def b
Binding.of_caller{|binding| eval 'self', binding}
end