Ruby元编程起步2
书接上回……
不过要先打个岔……
动态语言就是要动起来
Ruby被人说上亿遍是动态语言,所以咱就要动态给你们看
Array.class_eval do def punch_horse_ass puts "Piecehealth is a very tall, rich and handsome man!!!" end def say_truth puts "OK, fine, acutally I'm a diaosi" endend[1, 2, 3].punch_horse_assArray.class_eval {remove_method :say_truth}[1, 2, 3].say_truth # undefined method `say_truth' for [1, 2, 3]:Array (NoMethodError)
module Tool def self.csv2class csv_name klass_name = csv_name.gsub('.csv', '').gsub(/\s+/, '_').downcase.capitalize klass = Object.const_set(klass_name, Class.new) File.open(csv_name ) do |file| attributes = file.readline.chomp.split(',') klass.class_eval do attr_accessor *attributes define_method :initialize do |*args| attributes.each_with_index do |attribute, i| instance_variable_set("@#{attribute}", args[i]) end end end end endendTool.csv2class "Friends.csv"puts Friends.new('Lilei','M',26,'Worker').dept
def initialize *args attributes.each_with_index do |attribute, i| instance_variable_set("@#{attribute}", args[i]) end end