From: Brian Candler Date: 2008-11-26T21:17:08+09:00 Subject: Re: attr_reader, default attribute value, and rdoc of attrib dkmd_nielsen wrote: > What I want to do is create an attribute, allow it to have a default > value, and have the attribute documented as such (and not as a method) > with rdoc. So, would the proper syntax for accomplishing this > elementary feat be: > > # Field (row) delimiter. Default is a comma. > attr_reader fld_delimiter > > # :call-seq: > # fld_delimiter > # > # Returns the field (column) delimiter. Default is comma. > def fld_delimiter #:nodoc: > !@fld_delimiter.nil? ? @fld_delimiter : (@fld_delimiter = ',') > end > > # :call-seq: > # fld_delimiter(String) > # > # Assign a field (column) delimiter. > def fld_delimiter=(d) > @fld_delimiter = d > end I would tidy this up as: attr_accessor :fld_delimiter def fld_delimiter #:nodoc: @fld_delimiter ||= ',' end That assumes you never want to assign nil or false as a fld_delimiter. If you do, then attr_accessor :fld_delimiter def fld_delimiter #:nodoc @fld_delimiter = ',' unless defined? @fld_delimiter @fld_delimiter end Another option is never to assign when defaults are being used: using a constant lets you document the default. DEFAULT_FLD_DELIMITER = ','.freeze attr_accessor :fld_delimiter def fld_delimiter defined? @fld_delimiter ? @fld_delimiter : DEFAULT_FLD_DELIMITER end However I think it would be simpler just to set @fld_delimiter=',' in your object's initialize method. -- Posted via http://www.ruby-forum.com/.