From: Duane Johnson Date: 2005-10-26T00:12:48+09:00 Subject: Meta methods to govern meta data? I was intrigued by one of Matz's "Wild and Crazy Ideas" at RubyConf-- the inclusion of meta data in the comments section before a method definition. This got me thinking about the need for metadata and Ruby's fabulous introspective capabilities and I wondered if it might be better to have a governing "metamethod" for each method. Actually, more like accessor metamethods. These metamethods would be in charge of setting or getting key/value pairs describing things about the method it is associated with: # Returns double the input def double(i) i * 2 end meta :double, :require => 'i.is_a? Fixnum' meta :double, :comments => 'Returns double the input' I don't quite like the syntax yet, (probably because we don't really have a facility yet to talk about methods like this); however, I do like the flexibility provided. Perhaps we could make a new syntax like this: def double>require(i) i.is_a? Fixnum end def double>comment(original_comment) "Haha! I can over-ride the comment." end And we could even do some cool stuff like custom namespace selectors: def double>visibility(looking_at_me) [Object, ActiveRecord].include? looking_at_me end (i.e. the method would be called prior to any reference to 'double' and it would return 'true' if it is visible from within the caller's scope / namespace). We could even talk about meta-metamethods: def double>visibility>comment "Comment for the 'double>visibility' metamethod" end Duane Johnson (canadaduane)