Dear Ruby gurus:
How to get the method's name inside itself. For example to send it to
Error Processor
Thank you,
Henry
···
--
Posted via http://www.ruby-forum.com/.
Dear Ruby gurus:
How to get the method's name inside itself. For example to send it to
Error Processor
Thank you,
Henry
--
Posted via http://www.ruby-forum.com/.
Henry Savr wrote:
Dear Ruby gurus:
How to get the method's name inside itself. For example to send it to Error Processor
Thank you,
Henry
There is no _good_ way of getting the method name, but you can see here for solutions:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/205950
On the other hand, if you are doing it for error handling, why not just use exceptions? They will have the stack trace with them.
-Justin
Henry Savr wrote:
Dear Ruby gurus:
How to get the method's name inside itself. For example to send it to
Error Processor
Can you describe a situation where you have access to
modify what a method does but not its name? I know it
IS possible but rather unusual.
Ruby's exception handling will provide you with the
method name already. You could also do something like
this:
class Object
def method_name()
# Use Kernel.caller and some string manipulation here
end
end
class Foo
def foo
puts "My name is #{self.method_name}!"
end
end
I just do not see why this would be necessary.
Justin Collins wrote:
Henry Savr wrote:
Dear Ruby gurus:
How to get the method's name inside itself. For example to send it to
Error ProcessorThank you,
Henry
There is no _good_ way of getting the method name, but you can see here
for solutions:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/205950On the other hand, if you are doing it for error handling, why not just
use exceptions? They will have the stack trace with them.-Justin
Thank you,
actually it is NOT for error processing, but the Error example, what I
expect to get, is clear for virtually everybody.
Henry
--
Posted via http://www.ruby-forum.com/\.
Eero Saynatkari wrote:
class Object
def method_name()
# Use Kernel.caller and some string manipulation here
end
endclass Foo
def foo
puts "My name is #{self.method_name}!"
end
endI just do not see why this would be necessary.
Thank you,
Henry
Thank you,
sorry I had no chance to see it earlier
Regarding where it could be useful:
When you have to monitor app, which consists of thousands methods.
Monitor examples: process management, testing, security, etc...
In general, when somebody works for you, it is not a bad idea, to know
his/her name. It could be useful sometimes.
So I was wandering. Kernel uses and even sends a method name to app, and
I hoped, that it would share this knowledge with app by asking.
According you, it does not.
So, yes, thank you. I will have to cheat :)) and simulate errors until
Ruby developers will implement this in future editions.
I hope they read the forum.
--
Posted via http://www.ruby-forum.com/\.
Actually, I'd be more interested in finding out which object called
me, or getting the equivalent of caller, but getting an array of the
'self's down the call stack.
I haven't figured out how to do that yet in Ruby.
On 8/17/06, Eero Saynatkari <eero.saynatkari@kolumbus.fi> wrote:
Henry Savr wrote:
> Dear Ruby gurus:
>
> How to get the method's name inside itself. For example to send it to
> Error Processor
I just do not see why this would be necessary.
--
Rick DeNatale
My blog on Ruby
http://talklikeaduck.denhaven2.com/
google 'binding of caller' then
eval 'self', Binding.of_caller
-a
On Fri, 25 Aug 2006, Rick DeNatale wrote:
On 8/17/06, Eero Saynatkari <eero.saynatkari@kolumbus.fi> wrote:
Henry Savr wrote:
> Dear Ruby gurus:
>
> How to get the method's name inside itself. For example to send it to
> Error ProcessorI just do not see why this would be necessary.
Actually, I'd be more interested in finding out which object called
me, or getting the equivalent of caller, but getting an array of the
'self's down the call stack.I haven't figured out how to do that yet in Ruby.
--
to foster inner awareness, introspection, and reasoning is more efficient than
meditation and prayer.
- h.h. the 14th dalai lama
Well, if I understand what I found, it's not what I'm looking for.
Binding.of_caller seems to return the binding of the method which called it.
So let's say I've got this:
class String; def foo; who_called_me ;end;end
class X; def test(obj); obj.foo; end; end;
What I want is:
x = X.new ==> #<X:0xb7d56034>
x.test("Hello") ==> #<X:0xb7d56034>
instead of
x.test("Hello") ==> "Hello"
which is what I get, if I replace who_called_me with
eval 'self', binding.of_caller
It doesn't seem possible to get what I'm looking for using the
technique used in Binding.of_caller which is to set a trace to detect
when we return to the caller (or is it from the caller). To do what
I'm talking about seems to require examining the current call stack to
get the receiver of the preceding message.
It looks like the best you can do in ruby is to get a backtrace with
Kernel#caller, or by raising and rescuing an exception, only gives
strings describing where you were in the source, but with no access to
the actual receiver objects.
On 8/24/06, ara.t.howard@noaa.gov <ara.t.howard@noaa.gov> wrote:
On Fri, 25 Aug 2006, Rick DeNatale wrote:
> Actually, I'd be more interested in finding out which object called
> me, or getting the equivalent of caller, but getting an array of the
> 'self's down the call stack.
>
> I haven't figured out how to do that yet in Ruby.google 'binding of caller' then
eval 'self', Binding.of_caller
--
Rick DeNatale
My blog on Ruby
http://talklikeaduck.denhaven2.com/
IPMS/USA Region 12 Coordinator
http://ipmsr12.denhaven2.com/
Visit the Project Mercury Wiki Site
http://www.mercuryspacecraft.com/
It doesn't seem possible to get what I'm looking for using the
technique used in Binding.of_caller which is to set a trace to detect
when we return to the caller (or is it from the caller). To do what
I'm talking about seems to require examining the current call stack to
get the receiver of the preceding message.It looks like the best you can do in ruby is to get a backtrace with
Kernel#caller, or by raising and rescuing an exception, only gives
strings describing where you were in the source, but with no access to
the actual receiver objects.
Have a look at this article: http://eigenclass.org/hiki.rb?breakpoint+breaking+in+1.8.5\.
I believe the new library described here may be of use to you when it is released.
Matthew
It seems that ruby-debug already provides almost all features planned
for this library:
Consider this:
require "rubygems"
require 'ruby-debug'
Debugger.start
module Kernel
def binding_n(n = 0)
frame = Debugger.current_context.frames[n+1]
frame.binding if frame
end
end
def test
puts eval("var", binding_n(1))
end
var = 'Hello'
test
And I think that the overhead of both libraries should be the same,
which is substantial unfortunately.
On 8/25/06, Matthew Johnson <musical.matthew@mac.com> wrote:
Have a look at this article: http://eigenclass.org/hiki.rb?breakpoint
+breaking+in+1.8.5.I believe the new library described here may be of use to you when it
is released.
--
Kent
---
It seems that ruby-debug already provides almost all features planned
for this library:
I haven't checked that library out but will have to do so. Thanks for the pointer!
Matthew