From: Florian Gross Date: 2005-02-09T06:30:07+09:00 Subject: Re: Object#caller and Exception#backtrace --------------050008030002030203070008 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Ben Giddings wrote: > Seeing the wonderfulness of the 'to_ruby' method I mentioned just > recently got me thinking about Object#caller and Exception#backtrace again. > > I don't know about anybody else, but it seems strange to me that these > potentially really useful methods return an array of fixed strings. I'm > also puzzled by what information it is they return, and what they don't: > > ["exception.rb:84:in `start_juggernaut'", > "exception.rb:77:in `initialize'", > "exception.rb:108:in `new'", > "exception.rb:108"] > > They return the filename and a line number, which is great. A method, > which is useful... but no class / module or other form of nesting? Does > anybody understand why that is? Is there any desire to fix it? I think > having the class/module, at least, would be hella-useful. You can use Binding.of_caller to get the binding of your last-most caller. Using that you can also get the class and instance of it. It's quite limited, but IMHO still useful. --------------050008030002030203070008 Content-Type: application/x-ruby; name="binding_of_caller.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="binding_of_caller.rb" YmVnaW4NCiAgcmVxdWlyZSAnc2ltcGxlY2MnDQpyZXNjdWUgTG9hZEVycm9yDQogIGNsYXNz IENvbnRpbnVhdGlvbjsgZW5kICMgOm5vZG9jOiAjIGZvciBSRG9jDQogIGRlZiBDb250aW51 YXRpb24uY3JlYXRlKCphcmdzLCAmYmxvY2spICMgOm5vZG9jOg0KICAgIGNjID0gbmlsOyBy ZXN1bHQgPSBjYWxsY2Mge3xjfCBjYyA9IGM7IGJsb2NrLmNhbGwoY2MpIGlmIGJsb2NrIGFu ZCBhcmdzLmVtcHR5P30NCiAgICByZXN1bHQgfHw9IGFyZ3MNCiAgICByZXR1cm4gKltjYywg KnJlc3VsdF0NCiAgZW5kDQplbmQNCg0KY2xhc3MgQmluZGluZzsgZW5kICMgZm9yIFJEb2MN CiMgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmluZGluZyBvZiB0aGUgbWV0aG9kIHRoYXQg Y2FsbGVkIHlvdXINCiMgbWV0aG9kLiBJdCB3aWxsIHJhaXNlIGFuIEV4Y2VwdGlvbiB3aGVu IHlvdSdyZSBub3QgaW5zaWRlIGEgbWV0aG9kLg0KIw0KIyBJdCdzIHVzZWQgbGlrZSB0aGlz Og0KIyAgIGRlZiBpbmNfY291bnRlcihhbW91bnQgPSAxKQ0KIyAgICAgQmluZGluZy5vZl9j YWxsZXIgZG8gfGJpbmRpbmd8DQojICAgICAgICMgQ3JlYXRlIGEgbGFtYmRhIHRoYXQgd2ls bCBpbmNyZWFzZSB0aGUgdmFyaWFibGUgJ2NvdW50ZXInDQojICAgICAgICMgaW4gdGhlIGNh bGxlciBvZiB0aGlzIG1ldGhvZCB3aGVuIGNhbGxlZC4NCiMgICAgICAgaW5jID0gZXZhbCgi bGFtYmRhIHsgfGFyZ3wgY291bnRlciArPSBhcmcgfSIsIGJpbmRpbmcpDQojICAgICAgICMg V2UgY2FuIHJlZmVyIHRvIGFtb3VudCBmcm9tIGluc2lkZSB0aGlzIGJsb2NrIHNhZmVseS4N CiMgICAgICAgaW5jLmNhbGwoYW1vdW50KQ0KIyAgICAgZW5kDQojICAgICAjIE5vIG90aGVy IHN0YXRlbWVudHMgY2FuIGdvIGhlcmUuIFB1dCB0aGVtIGluc2lkZSB0aGUgYmxvY2suDQoj ICAgZW5kDQojICAgY291bnRlciA9IDANCiMgICAyLnRpbWVzIHsgaW5jX2NvdW50ZXIgfQ0K IyAgIGNvdW50ZXIgIyA9PiAyDQojDQojIEJpbmRpbmcub2ZfY2FsbGVyIG11c3QgYmUgdGhl IGxhc3Qgc3RhdGVtZW50IGluIHRoZSBtZXRob2QuDQojIFRoaXMgbWVhbnMgdGhhdCB5b3Ug d2lsbCBoYXZlIHRvIHB1dCBldmVyeXRoaW5nIHlvdSB3YW50IHRvDQojIGRvIGFmdGVyIHRo ZSBjYWxsIHRvIEJpbmRpbmcub2ZfY2FsbGVyIGludG8gdGhlIGJsb2NrIG9mIGl0Lg0KIyBU aGlzIHNob3VsZCBiZSBubyBwcm9ibGVtIGhvd2V2ZXIsIGJlY2F1c2UgUnVieSBoYXMgY2xv c3VyZXMuDQojIElmIHlvdSBkb24ndCBkbyB0aGlzIGFuIEV4Y2VwdGlvbiB3aWxsIGJlIHJh aXNlZC4gQmVjYXVzZSBvZg0KIyB0aGUgd2F5IHRoYXQgQmluZGluZy5vZl9jYWxsZXIgaXMg aW1wbGVtZW50ZWQgaXQgaGFzIHRvIGJlDQojIGRvbmUgdGhpcyB3YXkuDQpkZWYgQmluZGlu Zy5vZl9jYWxsZXIoJmJsb2NrKQ0KICBvbGRfY3JpdGljYWwgPSBUaHJlYWQuY3JpdGljYWwN CiAgVGhyZWFkLmNyaXRpY2FsID0gdHJ1ZQ0KICBjb3VudCA9IDANCiAgY2MsIHJlc3VsdCwg ZXJyb3IsIGV4dHJhX2RhdGEgPSBDb250aW51YXRpb24uY3JlYXRlKG5pbCwgbmlsKQ0KICBl cnJvci5jYWxsIGlmIGVycm9yDQoNCiAgdHJhY2VyID0gbGFtYmRhIGRvIHwqYXJnc3wNCiAg ICB0eXBlLCBjb250ZXh0LCBleHRyYV9kYXRhID0gYXJnc1swXSwgYXJnc1s0XSwgYXJncw0K ICAgIGlmIHR5cGUgPT0gInJldHVybiINCiAgICAgIGNvdW50ICs9IDENCiAgICAgICMgRmly c3QgdGhpcyBtZXRob2QgYW5kIHRoZW4gY2FsbGluZyBvbmUgd2lsbCByZXR1cm4gLS0NCiAg ICAgICMgdGhlIHRyYWNlIGV2ZW50IG9mIHRoZSBzZWNvbmQgZXZlbnQgZ2V0cyB0aGUgY29u dGV4dA0KICAgICAgIyBvZiB0aGUgbWV0aG9kIHdoaWNoIGNhbGxlZCB0aGUgbWV0aG9kIHRo YXQgY2FsbGVkIHRoaXMNCiAgICAgICMgbWV0aG9kLg0KICAgICAgaWYgY291bnQgPT0gMg0K ICAgICAgICAjIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgcmVzdG9yZSB0aGUgdHJh Y2VfZnVuYw0KICAgICAgICAjIHRoYXQgd2FzIHNldCBiZWZvcmUgd2Ugc3dhcHBlZCBpbiBv dXIgb3duIG9uZSwgYnV0DQogICAgICAgICMgdGhpcyBpcyBpbXBvc3NpYmxlIHdpdGhvdXQg b3ZlcmxvYWRpbmcgc2V0X3RyYWNlX2Z1bmMNCiAgICAgICAgIyBpbiBjdXJyZW50IFJ1Ynku DQogICAgICAgIHNldF90cmFjZV9mdW5jKG5pbCkNCiAgICAgICAgY2MuY2FsbChldmFsKCJi aW5kaW5nIiwgY29udGV4dCksIG5pbCwgZXh0cmFfZGF0YSkNCiAgICAgIGVuZA0KICAgIGVs c2lmIHR5cGUgPT0gImxpbmUiIHRoZW4NCiAgICAgIG5pbA0KICAgIGVsc2lmIHR5cGUgPT0g ImMtcmV0dXJuIiBhbmQgZXh0cmFfZGF0YVszXSA9PSA6c2V0X3RyYWNlX2Z1bmMgdGhlbg0K ICAgICAgbmlsDQogICAgZWxzZQ0KICAgICAgc2V0X3RyYWNlX2Z1bmMobmlsKQ0KICAgICAg ZXJyb3JfbXNnID0gIkJpbmRpbmcub2ZfY2FsbGVyIHVzZWQgaW4gbm9uLW1ldGhvZCBjb250 ZXh0IG9yICIgKw0KICAgICAgICAidHJhaWxpbmcgc3RhdGVtZW50cyBvZiBtZXRob2QgdXNp bmcgaXQgYXJlbid0IGluIHRoZSBibG9jay4iDQogICAgICBjYy5jYWxsKG5pbCwgbGFtYmRh IHsgcmFpc2UoQXJndW1lbnRFcnJvciwgZXJyb3JfbXNnKSB9LCBuaWwpDQogICAgZW5kDQog IGVuZA0KDQogIHVubGVzcyByZXN1bHQNCiAgICBzZXRfdHJhY2VfZnVuYyh0cmFjZXIpDQog ICAgcmV0dXJuIG5pbA0KICBlbHNlDQogICAgVGhyZWFkLmNyaXRpY2FsID0gb2xkX2NyaXRp Y2FsDQogICAgY2FzZSBibG9jay5hcml0eQ0KICAgICAgd2hlbiAxIHRoZW4geWllbGQocmVz dWx0KQ0KICAgICAgZWxzZSB5aWVsZChyZXN1bHQsIGV4dHJhX2RhdGEpICAgICAgICANCiAg ICBlbmQNCiAgZW5kDQplbmQNCg== --------------050008030002030203070008--