From: Stefan Lang Date: 2005-11-05T20:57:13+09:00 Subject: Re: what does "class << self" do? On Saturday 05 November 2005 08:32, petermichaux@yahoo.com wrote: > Hi, > > I'm looking at the rails activerecord base.rb file it's main > structure is shown below. Why have a class inside a class like > this? What advantages are there? > > Thanks, > Peter > > class Base > > # methods ... > > class << self # Class methods > # methods ... > end > > # methods ... > > end You can define methods like attr_accessor, has_many etc. Example: class Base class << self # At this level we are defining methods # for the Class instance Base. These methods # are also called class methods (of the Base class). def flag(attr_name) class_eval <<-EOD def #{attr_name}? @#{attr_name} == true end def #{attr_name} @#{attr_name} = true end def disable_#{attr_name} @#{attr_name} = false end EOD end end end class Foo < Base flag :quiet def initialize @quiet = false end end f = Foo.new p f.quiet? # => false f.quiet p f.quiet? # => true f.disable_quiet p f.quiet? # => false -- Stefan