From: Florian Gross Date: 2005-03-16T05:34:47+09:00 Subject: Re: Problem with aliasing String#index --------------000300040306090501020107 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Niklas Frykholm wrote: > Ah... interesting... but that technique doesn't really work with > String#index, since String#index doesn't take a block. > > I think I just have to resign from the idea of making a completely > transparent String wrapper. > > But it would be nice if this was resolved. In principle, I think it > should be possible to do the same things from Ruby as from C. I.e. if C > can set a variable $~ in the caller's scope, it should be possible to do > that from Ruby as well. Indeed. See attachment, Binding.of_caller. --------------000300040306090501020107 Content-Type: application/x-ruby; name="binding_of_caller.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="binding_of_caller.rb" Y2xhc3MgQ29udGludWF0aW9uICMgOm5vZG9jOg0KICBkZWYgc2VsZi5jcmVhdGUoKmFyZ3Ms ICZibG9jaykgIyA6bm9kb2M6DQogICAgY2MgPSBuaWw7IHJlc3VsdCA9IGNhbGxjYyB7fGN8 IGNjID0gYzsgYmxvY2suY2FsbChjYykgaWYgYmxvY2sgYW5kIGFyZ3MuZW1wdHk/fQ0KICAg IHJlc3VsdCB8fD0gYXJncw0KICAgIHJldHVybiAqW2NjLCAqcmVzdWx0XQ0KICBlbmQNCmVu ZA0KDQpjbGFzcyBCaW5kaW5nOyBlbmQgIyBmb3IgUkRvYw0KIyBUaGlzIG1ldGhvZCByZXR1 cm5zIHRoZSBiaW5kaW5nIG9mIHRoZSBtZXRob2QgdGhhdCBjYWxsZWQgeW91cg0KIyBtZXRo b2QuIEl0IHdpbGwgcmFpc2UgYW4gRXhjZXB0aW9uIHdoZW4geW91J3JlIG5vdCBpbnNpZGUg YSBtZXRob2QuDQojDQojIEl0J3MgdXNlZCBsaWtlIHRoaXM6DQojICAgZGVmIGluY19jb3Vu dGVyKGFtb3VudCA9IDEpDQojICAgICBCaW5kaW5nLm9mX2NhbGxlciBkbyB8YmluZGluZ3wN CiMgICAgICAgIyBDcmVhdGUgYSBsYW1iZGEgdGhhdCB3aWxsIGluY3JlYXNlIHRoZSB2YXJp YWJsZSAnY291bnRlcicNCiMgICAgICAgIyBpbiB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9k IHdoZW4gY2FsbGVkLg0KIyAgICAgICBpbmMgPSBldmFsKCJsYW1iZGEgeyB8YXJnfCBjb3Vu dGVyICs9IGFyZyB9IiwgYmluZGluZykNCiMgICAgICAgIyBXZSBjYW4gcmVmZXIgdG8gYW1v dW50IGZyb20gaW5zaWRlIHRoaXMgYmxvY2sgc2FmZWx5Lg0KIyAgICAgICBpbmMuY2FsbChh bW91bnQpDQojICAgICBlbmQNCiMgICAgICMgTm8gb3RoZXIgc3RhdGVtZW50cyBjYW4gZ28g aGVyZS4gUHV0IHRoZW0gaW5zaWRlIHRoZSBibG9jay4NCiMgICBlbmQNCiMgICBjb3VudGVy ID0gMA0KIyAgIDIudGltZXMgeyBpbmNfY291bnRlciB9DQojICAgY291bnRlciAjID0+IDIN CiMNCiMgQmluZGluZy5vZl9jYWxsZXIgbXVzdCBiZSB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4g dGhlIG1ldGhvZC4NCiMgVGhpcyBtZWFucyB0aGF0IHlvdSB3aWxsIGhhdmUgdG8gcHV0IGV2 ZXJ5dGhpbmcgeW91IHdhbnQgdG8NCiMgZG8gYWZ0ZXIgdGhlIGNhbGwgdG8gQmluZGluZy5v Zl9jYWxsZXIgaW50byB0aGUgYmxvY2sgb2YgaXQuDQojIFRoaXMgc2hvdWxkIGJlIG5vIHBy b2JsZW0gaG93ZXZlciwgYmVjYXVzZSBSdWJ5IGhhcyBjbG9zdXJlcy4NCiMgSWYgeW91IGRv bid0IGRvIHRoaXMgYW4gRXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiBCZWNhdXNlIG9mDQoj IHRoZSB3YXkgdGhhdCBCaW5kaW5nLm9mX2NhbGxlciBpcyBpbXBsZW1lbnRlZCBpdCBoYXMg dG8gYmUNCiMgZG9uZSB0aGlzIHdheS4NCmRlZiBCaW5kaW5nLm9mX2NhbGxlcigmYmxvY2sp DQogIG9sZF9jcml0aWNhbCA9IFRocmVhZC5jcml0aWNhbA0KICBUaHJlYWQuY3JpdGljYWwg PSB0cnVlDQogIGNvdW50ID0gMA0KICBjYywgcmVzdWx0LCBlcnJvciwgZXh0cmFfZGF0YSA9 IENvbnRpbnVhdGlvbi5jcmVhdGUobmlsLCBuaWwpDQogIGVycm9yLmNhbGwgaWYgZXJyb3IN Cg0KICB0cmFjZXIgPSBsYW1iZGEgZG8gfCphcmdzfA0KICAgIHR5cGUsIGNvbnRleHQsIGV4 dHJhX2RhdGEgPSBhcmdzWzBdLCBhcmdzWzRdLCBhcmdzDQogICAgaWYgdHlwZSA9PSAicmV0 dXJuIg0KICAgICAgY291bnQgKz0gMQ0KICAgICAgIyBGaXJzdCB0aGlzIG1ldGhvZCBhbmQg dGhlbiBjYWxsaW5nIG9uZSB3aWxsIHJldHVybiAtLQ0KICAgICAgIyB0aGUgdHJhY2UgZXZl bnQgb2YgdGhlIHNlY29uZCBldmVudCBnZXRzIHRoZSBjb250ZXh0DQogICAgICAjIG9mIHRo ZSBtZXRob2Qgd2hpY2ggY2FsbGVkIHRoZSBtZXRob2QgdGhhdCBjYWxsZWQgdGhpcw0KICAg ICAgIyBtZXRob2QuDQogICAgICBpZiBjb3VudCA9PSAyDQogICAgICAgICMgSXQgd291bGQg YmUgbmljZSBpZiB3ZSBjb3VsZCByZXN0b3JlIHRoZSB0cmFjZV9mdW5jDQogICAgICAgICMg dGhhdCB3YXMgc2V0IGJlZm9yZSB3ZSBzd2FwcGVkIGluIG91ciBvd24gb25lLCBidXQNCiAg ICAgICAgIyB0aGlzIGlzIGltcG9zc2libGUgd2l0aG91dCBvdmVybG9hZGluZyBzZXRfdHJh Y2VfZnVuYw0KICAgICAgICAjIGluIGN1cnJlbnQgUnVieS4NCiAgICAgICAgc2V0X3RyYWNl X2Z1bmMobmlsKQ0KICAgICAgICBjYy5jYWxsKGV2YWwoImJpbmRpbmciLCBjb250ZXh0KSwg bmlsLCBleHRyYV9kYXRhKQ0KICAgICAgZW5kDQogICAgZWxzaWYgdHlwZSA9PSAibGluZSIg dGhlbg0KICAgICAgbmlsDQogICAgZWxzaWYgdHlwZSA9PSAiYy1yZXR1cm4iIGFuZCBleHRy YV9kYXRhWzNdID09IDpzZXRfdHJhY2VfZnVuYyB0aGVuDQogICAgICBuaWwNCiAgICBlbHNl DQogICAgICBzZXRfdHJhY2VfZnVuYyhuaWwpDQogICAgICBlcnJvcl9tc2cgPSAiQmluZGlu Zy5vZl9jYWxsZXIgdXNlZCBpbiBub24tbWV0aG9kIGNvbnRleHQgb3IgIiArDQogICAgICAg ICJ0cmFpbGluZyBzdGF0ZW1lbnRzIG9mIG1ldGhvZCB1c2luZyBpdCBhcmVuJ3QgaW4gdGhl IGJsb2NrLiINCiAgICAgIGNjLmNhbGwobmlsLCBsYW1iZGEgeyByYWlzZShBcmd1bWVudEVy cm9yLCBlcnJvcl9tc2cpIH0sIG5pbCkNCiAgICBlbmQNCiAgZW5kDQoNCiAgdW5sZXNzIHJl c3VsdA0KICAgIHNldF90cmFjZV9mdW5jKHRyYWNlcikNCiAgICByZXR1cm4gbmlsDQogIGVs c2UNCiAgICBUaHJlYWQuY3JpdGljYWwgPSBvbGRfY3JpdGljYWwNCiAgICBjYXNlIGJsb2Nr LmFyaXR5DQogICAgICB3aGVuIDEgdGhlbiB5aWVsZChyZXN1bHQpDQogICAgICBlbHNlIHlp ZWxkKHJlc3VsdCwgZXh0cmFfZGF0YSkgICAgICAgIA0KICAgIGVuZA0KICBlbmQNCmVuZA0K --------------000300040306090501020107--