Ruby - Class Accessor Methods


Consider the following code:

class Thing       
   def initialize( aName, aDescription ) 
     @name         = aName 
     @description  = aDescription 
  def get_name 
      return @name 
  def set_name( aName ) 
      @name = aName 
  def get_description 
      return @description 
  def set_description( aDescription ) 
      @description = aDescription  


Instead of accessing the value of the @description instance variable with two different methods, get_description and set_description, like this:

puts( t1.get_description ) 
t1.set_description("Some description" ) 

It would be nicer to retrieve and assign values just as you would retrieve and assign values to and from a simple variable, like this:

puts( t1.description ) 
t1.description = "Some description" 

To do this, to modify the Product class definition.

One way of accomplishing this would be to rewrite the accessor methods for @description as follows:

def description 
    return @description 
def description=( aDescription ) 
    @description = aDescription 

We have added accessors. Here, the get accessor is called description, and the set accessor is called description=.

It appends an equals sign to the method name used by the corresponding get accessor.

It is now possible to assign a new string like this:

t.description = "new value" 

And you can retrieve the value like this:

puts( t.description ) 

Note that when you write a set accessor in this way, you must append the = character to the method name, not merely place it somewhere between the method name and the arguments.

In other words, this is correct:

def name=( aName ) 

but this results in an error:

def name   =  ( aName ) 

Related Topic