From: ara.t.howard@... Date: 2006-12-29T01:42:22+09:00 Subject: Re: override.rb ---1400102478-1629766353-1167324141=:5000 Content-Type: MULTIPART/MIXED; BOUNDARY="-1400102478-1629766353-1167324141=:5000" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1400102478-1629766353-1167324141=:5000 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed On Thu, 28 Dec 2006, Pit Capitain wrote: > ara.t.howard@noaa.gov schrieb: >> (... code to override and restore methods ...) > > Ara, though I find this very interesting I've not much time to figure it out > myself, so could you please show us an example with #overriding and > #restoring ? harp:~ > cat a.rb require 'override' class C c = new def m() 'a' end def n() 'x' end p c.m #=> a p c.n #=> x overriding{ def m() super << 'b' end def n() super << 'y' end } p c.m #=> ab p c.n #=> xy restoring{ m and n } p c.m #=> a p c.n #=> x end harp:~ > ruby a.rb "a" "x" "ab" "xy" "a" "x" i'll probably merge restore/restoring so the above will become restore{ m and n } >> can people break this? > > What do you mean by "break"? just finding bugs. regards. ps. latest version inlined below -a -- if you find yourself slandering anybody, first imagine that your mouth is filled with excrement. it will break you of the habit quickly enough. - the dalai lama file: override.rb class Module def singleton_class &b @singleton_class ||= (class << self; self; end) @singleton_class.module_eval &b if b @singleton_class end def overload :pattern => :method singleton_class{ module_eval <<-co } end end class C def self.new0 i p [i] end def self.new1 i, s p [i,s] end def self.new2 i, s, f p [i,s,f] end end ---1400102478-1629766353-1167324141=:5000 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=override.rb Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=override.rb Y2xhc3MgTW9kdWxlDQogIG1vZHVsZSBPdmVyUmlkaW5nDQogICAgY2xhc3Mg PDwgc2VsZg0KICAgICAgZGVmIG5ldw0KICAgICAgICBNb2R1bGUubmV3eyAN CiAgICAgICAgICBAYWRkZWRfbWV0aG9kcyA9IFtdIA0KICAgICAgICAgIEBw YXJlbnQgPSBuaWwNCg0KICAgICAgICAgIGNsYXNzIDw8IHNlbGYNCiAgICAg ICAgICAgIGF0dHIgOmFkZGVkX21ldGhvZHMNCiAgICAgICAgICAgIGF0dHIg OnBhcmVudA0KDQogICAgICAgICAgICBkZWYgbWV0aG9kX2FkZGVkIG0NCiAg ICAgICAgICAgICAgc3VwZXIgaWYgZGVmaW5lZD8gc3VwZXINCiAgICAgICAg ICAgIGVuc3VyZQ0KICAgICAgICAgICAgICBhZGRlZF9tZXRob2RzIDw8IG0u dG9fcw0KICAgICAgICAgICAgZW5kDQoNCiAgICAgICAgICAgIGRlZiByZW1v dmVfbWV0aG9kIG0NCiAgICAgICAgICAgICAgc3VwZXIgaWYgZGVmaW5lZD8g c3VwZXINCiAgICAgICAgICAgIGVuc3VyZQ0KICAgICAgICAgICAgICBhZGRl ZF9tZXRob2RzLmRlbGV0ZV9hdChhZGRlZF9tZXRob2RzLnJpbmRleChtLnRv X3MpKSByZXNjdWUgbmlsDQogICAgICAgICAgICBlbmQNCg0KICAgICAgICAg ICAgZGVmIGFkZF9wYXJlbnQgbQ0KICAgICAgICAgICAgICBpbmNsdWRlKEBw YXJlbnQgPSBtKQ0KICAgICAgICAgICAgZW5kDQoNCiAgICAgICAgICAgIGRl ZiBjYWNoZSBtbmFtZSwgbQ0KICAgICAgICAgICAgICBtbmFtZSA9IG1uYW1l LnRvX3MNCiAgICAgICAgICAgICAgY29uc3QgPSBtbmFtZS5nc3ViKCVyL1sh XS8sJ19fYmFuZ19fJykuZ3N1Yiglci9bP10vLCdfX3doYXRfXycpLnVwY2Fz ZQ0KICAgICAgICAgICAgICBjb25zdF9zZXQgY29uc3QsIG0NCg0KICAgICAg ICAgICAgICBtb2R1bGVfZXZhbCA8PC1jb2RlDQogICAgICAgICAgICAgICAg ZGVmICN7IG1uYW1lIH0gKmEsICZiDQogICAgICAgICAgICAgICAgICAjeyBj b25zdCB9LmJpbmQoc2VsZikuY2FsbCAqYSwgJmINCiAgICAgICAgICAgICAg ICBlbmQNCiAgICAgICAgICAgICAgY29kZQ0KICAgICAgICAgICAgZW5kDQoN CiAgICAgICAgICAgIGRlZiB3YWxraW5nX3VwDQogICAgICAgICAgICAgIG0g PSBzZWxmDQogICAgICAgICAgICAgIGxvb3B7DQogICAgICAgICAgICAgICAg eWllbGQgbQ0KICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcygobT1tLnBh cmVudCkgcmVzY3VlIG5pbCkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgZW5kDQogICAgICAgICAgZW5kDQogICAgICAgIH0NCiAgICAgIGVuZA0K ICAgIGVuZA0KICBlbmQNCg0KICBkZWYgb3ZlcnJpZGluZyAmYg0KICAgIHRo aXMgPSBzZWxmDQogICAgbSA9IE92ZXJSaWRpbmcubmV3DQogICAgbS5tb2R1 bGVfZXZhbCAmYg0KDQogICAgdW5sZXNzIGRlZmluZWQ/IEBvdmVycmlkaW5n IA0KICAgICAgQG92ZXJyaWRpbmcgPSBPdmVyUmlkaW5nLm5ldw0KICAgICAg bS5hZGRlZF9tZXRob2RzLmVhY2ggZG8gfG1uYW1lfA0KICAgICAgICBAb3Zl cnJpZGluZy5jYWNoZSBtbmFtZSwgdGhpcy5pbnN0YW5jZV9tZXRob2QobW5h bWUpDQogICAgICAgIHJlbW92ZV9tZXRob2QgbW5hbWUNCiAgICAgIGVuZA0K ICAgIGVuZA0KDQogICAgbS5hZGRfcGFyZW50IEBvdmVycmlkaW5nDQogICAg aW5jbHVkZSBtIA0KICAgIEBvdmVycmlkaW5nID0gbQ0KICBlbmQNCiAgYWxp YXNfbWV0aG9kICdvdmVycmlkZScsICdvdmVycmlkaW5nJw0KDQogIGRlZiBy ZXN0b3JlIG1uYW1lDQogICAgaWYgZGVmaW5lZD8gQG92ZXJyaWRpbmcNCiAg ICAgIG1uYW1lID0gbW5hbWUudG9fcw0KICAgICAgQG92ZXJyaWRpbmcud2Fs a2luZ191cCBkbyB8bXwNCiAgICAgICAgYnJlYWsoIG0ucmVtb3ZlX21ldGhv ZCBtbmFtZSApIGlmIG0uYWRkZWRfbWV0aG9kcy5pbmNsdWRlPyhtbmFtZSkN CiAgICAgIGVuZA0KICAgIGVuZA0KICAgIGluc3RhbmNlX21ldGhvZCBtbmFt ZQ0KICBlbmQNCg0KICBkZWYgcmVzdG9yaW5nICpfYSwgJl9iDQogICAgbyA9 IE9iamVjdC5uZXcNCiAgICBzYyA9IGNsYXNzIDw8IG87IHNlbGY7IGVuZA0K ICAgIHNjLm1vZHVsZV9ldmFsew0KICAgICAgaW5zdGFuY2VfbWV0aG9kcy5l YWNoe3xtfCByZW1vdmVfbWV0aG9kIG0gdW5sZXNzIG1bL15fXy9dIHJlc2N1 ZSBuaWx9DQogICAgICBkZWZpbmVfbWV0aG9kKCdtZXRob2RfbWlzc2luZycp e3xfX20sICpfX2F8IF9hIDw8IF9fbTsgc2VsZiB9DQogICAgfQ0KICAgIG8u aW5zdGFuY2VfZXZhbCAmX2INCiAgICBfYS5mbGF0dGVuLmNvbXBhY3QuZWFj aHt8bXwgcmVzdG9yZSBtfQ0KICBlbmQNCmVuZA0KDQppZiAkMCA9PSBfX0ZJ TEVfXw0KDQogIGNsYXNzIEMNCiAgICBjID0gbmV3DQoNCiAgICBkZWYgbSgp ICdhJyBlbmQNCiAgICBwIGMubSAjPT4gJ2EnDQoNCiAgICBvdmVycmlkZXsg ZGVmIG0oKSBzdXBlciArICdiJyBlbmQgfQ0KICAgIHAgYy5tICM9PiAnYWIn DQoNCiAgICBvdmVycmlkZXsgZGVmIG0oKSBzdXBlciArICdjJyBlbmQgfQ0K ICAgIHAgYy5tICM9PiAnYWJjJw0KDQogICAgb3ZlcnJpZGV7IGRlZiBtKCkg c3VwZXIgKyAnZCcgZW5kIH0NCiAgICBwIGMubSAjPT4gJ2FiY2QnDQoNCiAg ICByZXN0b3JlICdtJw0KICAgIHAgYy5tICM9PiAnYWJjJw0KDQogICAgcmVz dG9yZSAnbScNCiAgICBwIGMubSAjPT4gJ2FiJw0KDQogICAgcmVzdG9yZSAn bScNCiAgICBwIGMubSAjPT4gJ2EnDQogIGVuZA0KDQplbmQNCg== ---1400102478-1629766353-1167324141=:5000-- ---1400102478-1629766353-1167324141=:5000--