Tuesday, October 14, 2008

Ruby metaprogramming accessor

Rubyのアクセッサ相当を書いてみる
instance_variable_get, _setがインスタンス変数を文字列として取れる
という点がポイントか

   1  #!/usr/bin/env ruby

   2  # encoding: utf-8

   3  class Creature

   4    def self.atta(*arg)

   5      arg.each do |arg|

   6        define_method(arg) do

   7          instance_variable_get("@#{arg}")

   8        end

   9        define_method("#{arg}=") do |val|

  10          instance_variable_set("@#{arg}", val)

  11        end

  12      end

  13    end

  14  

  15  end

  16  

  17  class Dragon < Creature

  18    atta :life

  19  end

  20  d = Dragon.new

  21  d.life = 20

  22  d.life # => 20

  23  

No comments: