Confirmation required - initialising

Is i) and ii) just two different methods for initialising?

i)
class Song
  attr_reader :name, :artist, :
end

ii)
def initialize(foo, blah, haha)
  @foo = foo
  @blah = blah
  @haha = haha
end

···

--
John Maclean
MSc (DIC)
07739 171 531

If you remove the trailing , and :, the above is equivalent to:

class Song
   def name
     @name
   end
   def artist
     @artist
   end
end

No variables are set by this code, so no, it's not a method of initialization.

Hope that helps.

James Edward Gray II

···

On Jan 6, 2006, at 8:20 AM, John Maclean wrote:

Is i) and ii) just two different methods for initialising?

i)
class Song
  attr_reader :name, :artist, :
end

John Maclean wrote:

Is i) and ii) just two different methods for initialising?

No.

i)
class Song
  attr_reader :name, :artist, :
end

Creates attr reader methods but does nothing about values.

ii)
def initialize(foo, blah, haha)
  @foo = foo
  @blah = blah
  @haha = haha
end

Initializes values but does not create reader methods.

You can make your life easier by using Struct:

Song = Struct.new(:name, :artist)
s1 = Song.new "foo", "bar"

Struct will create setters, getters and an appropriate constructor
(#initialize)

Kind regards

    robert

John Maclean wrote:

Is i) and ii) just two different methods for initialising?

i)
class Song attr_reader :name, :artist, :
end

ii) def initialize(foo, blah, haha)
  @foo = foo
  @blah = blah
  @haha = haha
end

No, the first is basically the same as this: (Ignoring the syntax error)

class Song
   def name()
     return @name
   end

   def artist()
     return @artist
   end
end

attr_reader, attr_writer and attr_accessor don't touch the initialize() method at all. They are just for defining getters and setters because instance variables are always private in Ruby. (There's still ways to get at them from the outside even without getters through reflection, but think before doing that.)

···

--
http://flgr.0x42.net/

James Edward Gray II wrote:

···

On Jan 6, 2006, at 8:20 AM, John Maclean wrote:

Is i) and ii) just two different methods for initialising?

i)
class Song
  attr_reader :name, :artist, :
end

If you remove the trailing , and :, the above is equivalent to:

class Song
  def name
    @name
  end
  def artist
    @artist
  end
end

Except that rdoc produces different output for each.

James
--

http://www.ruby-doc.org - Ruby Help & Documentation
Ruby Code & Style - Ruby Code & Style: Writers wanted
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys
http://www.30secondrule.com - Building Better Tools

attr_accessor = attr_reader + attr_writer ?

I'm fairly new to Ruby, but aren't Florian's and James' examples
identical, besides the syntax? Both achieve the same thing, correct?

Doug

forest wrote:

attr_accessor = attr_reader + attr_writer ?

Yes, exactly.

···

--
http://flgr.0x42.net/

Yup, when there's no return the result of the last executed statement is automatically returned. Just thought it would be good to be explicit in this case.

···

doug.pfeffer@gmail.com wrote:

I'm fairly new to Ruby, but aren't Florian's and James' examples
identical, besides the syntax? Both achieve the same thing, correct?

--
http://flgr.0x42.net/