1: http://ruby-china.org/topics/413
module YourPlugin module Mixin def xxx_attr(attr) attr = attr.to_s self.class_eval(%Q{ def #{attr} #... end def #{attr}=(value) #... end } ) end end end class Post include YourPlugin::Mixin xxx_attr :tag_list end
2. http://quake.iteye.com/blog/448235
- #plugins/your_plugin_name/lib/enum_attr.rb
- module EnumAttr
- module Mixin
- def enum_attr(attr, enums)
- attr = attr.to_s
- self.class_eval(%Q{
- ENUMS_#{attr.upcase} = enums
- validates_inclusion_of attr, :in => enums.map{|e| e[1]}, :allow_nil => true
- def #{attr}_name
- ENUMS_#{attr.upcase}.find{|option| option[1] == #{attr}}[0] unless #{attr}.nil?
- end
- })
- end
- end
- end
- #plugins/your_plugin_name/init.rb
- require 'enum_attr'
- Object.send :include, EnumAttr::Mixin
本文介绍了一种使用 Ruby 实现模块混入的方法,并展示了如何通过 class_eval 动态定义对象属性及其实现细节。此外还提供了一个枚举属性的实现案例,包括验证和获取枚举名称的功能。

被折叠的 条评论
为什么被折叠?



