|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
This just occurred to me (for Java fans): class Module def deprecated *meths meths.each do |me| aliased = "_deprecate_#{me}" alias_method aliased, me class_eval "def #{me}(*a,&b) $stderr.puts 'WARNING: deprecated method called: #{me}'; #{aliased}(*a,&b) end" end end end irb(main):010:0> class String irb(main):011:1> deprecated :to_i irb(main):012:1> end => [:to_i] irb(main):013:0> "123".to_i WARNING: deprecated method called: to_i => 123 irb(main):014:0> Kind regards robert |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Robert Klemme wrote:
> > This just occurred to me (for Java fans): > > class Module > def deprecated *meths > meths.each do |me| > aliased = "_deprecate_#{me}" > alias_method aliased, me > class_eval "def #{me}(*a,&b) $stderr.puts 'WARNING: deprecated > method called: #{me}'; #{aliased}(*a,&b) end" > end > end > end Nice (and I'm not a Java fan). I'd make the output indirect, though, in case of GUI etc. Also, you could use this to only warn on the first call of each method for a given class. class Module def deprecated *meths meths.each do |me| aliased = "_deprecate_#{me}" alias_method aliased, me class_eval %{ def #{me}(*a,&b) warn_deprecated('#{me}') #{aliased}(*a,&b) end } end end end class Object def warn_deprecated me warn "WARNING: deprecated method called: #{me}" end end -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407 |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
On 25.02.2008 23:02, Joel VanderWerf wrote:
> Robert Klemme wrote: >> This just occurred to me (for Java fans): >> >> class Module >> def deprecated *meths >> meths.each do |me| >> aliased = "_deprecate_#{me}" >> alias_method aliased, me >> class_eval "def #{me}(*a,&b) $stderr.puts 'WARNING: deprecated >> method called: #{me}'; #{aliased}(*a,&b) end" >> end >> end >> end > > Nice (and I'm not a Java fan). I'd make the output indirect, though, in > case of GUI etc. Also, you could use this to only warn on the first call > of each method for a given class. > > class Module > def deprecated *meths > meths.each do |me| > aliased = "_deprecate_#{me}" > alias_method aliased, me > class_eval %{ > def #{me}(*a,&b) > warn_deprecated('#{me}') > #{aliased}(*a,&b) > end > } > end > end > end > > class Object > def warn_deprecated me > warn "WARNING: deprecated method called: #{me}" > end > end Good idea! This could even be combined with standard logging libs. Kind regards robert |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Thanks for this code :d
|
|
![]() |
| Outils de la discussion | |
|
|