Difference between revisions of "Metaprogramming in Ruby"
Jump to navigation
Jump to search
PeterHarding (talk | contribs) |
PeterHarding (talk | contribs) |
||
| Line 43: | Line 43: | ||
puts ex.tst | puts ex.tst | ||
</pre> | </pre> | ||
Output | |||
<pre> | |||
vega:~ plh$ !./ | |||
./meta.rb | |||
var | |||
tst | |||
Set var = 99 | |||
Get var | |||
99 | |||
Set tst = 2 | |||
Get tst | |||
2 | |||
</pre> | |||
[[Category:Ruby]] | [[Category:Ruby]] | ||
[[Category:Examples]] | [[Category:Examples]] | ||
[[Caegory:Metaprogramming]] | [[Caegory:Metaprogramming]] | ||
Revision as of 14:26, 14 May 2012
Reimplement attr_accessor
#!/usr/bin/env ruby
module Accessor
def my_attr_accessor(name)
STDERR.print "#{name}\n"
ivar_name = "@#{name}"
define_method(name) do
STDERR.print "Get #{name}\n"
instance_variable_get(ivar_name)
end
define_method("#{name}=") do |val|
STDERR.print "Set #{name} = #{val}\n"
instance_variable_set(ivar_name, val)
end
end
end
class Example
extend Accessor
my_attr_accessor :var
my_attr_accessor :tst
end
ex = Example.new
ex.var = 99
puts ex.var
ex.tst = 2
puts ex.tst
Output
vega:~ plh$ !./ ./meta.rb var tst Set var = 99 Get var 99 Set tst = 2 Get tst 2