2014年7月12日土曜日

Rubyで Stringで指定された名前の、instanceをdynamicに生成する

#文字列を指定して、動的にインスタンスを生成できるか?
#指定したStringで、instanceをdynamicに生成する
#インスタンス変数を動的に作成する

ruby 2.0.0p451 (2014-02-24 revision 45167) [x86_64-darwin13.1.0]


#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-

class Cat
    def initialize(name)
        @name = name
    end
    attr_accessor :name
    #attr_reader :name
    def say
        puts "hello i'm #{@name}."
    end
end

if __FILE__ == $0

  class_name = "Cat"
  name_of_cat = "chibi"
  res = eval "@#{name_of_cat} = #{class_name}.new('#{name_of_cat}')"
  p res
  @chibi.say

  puts "----"
  puts
  
  cat_name_list =["tama", "mike", "kuro"]
  cat_name_list.each do | cat_name|
    eval "@#{cat_name} = #{class_name}.new('#{cat_name}')"
  end
  
  cat_name_list.each do | cat_name |
    eval "@#{cat_name}.say"
  end
  
  
end

__END__

0 コメント: